2016-08-22 16 views
0

我不確定這個問題是否值得問,但我似乎無法找到解決方法,所以在這裏。在將它傳遞給一個新函數後使用FormData

我有一個Flask應用程序,我在其中提交了一個將圖像上傳到服務器的表單。我送使用創建這樣FORMDATA圖像:

$("#myform").submit(function(event) { 
    event.preventDefault(); 
    var $form = $(this), 
    formObject = $('form')[0], 
    formData = new FormData(formObject); 
    // other stuff 

的FORMDATA然後通過一個AJAX POST請求到服務器發送。當POST請求位於submit函數中時,此操作完美工作。

問題是,在其他視圖中,我需要使用相同的代碼,但我將AJAX POST請求從提交函數中移出。因此,當我將formObjectformData傳遞給包含AJAX請求的函數時,我們將其稱爲fctA,它們未定義。

我認爲我看到了問題,因爲提交功能有一個「特定狀態」(因爲您可以使用$(this)獲取表格),但我找不到一種方法將formData傳遞給其他函數。我不想擺脫fctA,因爲它可以避免複製大量代碼(因爲客戶端驗證)

有沒有辦法通過不同的函數調用傳遞FormData?

在此先感謝。

//Edit: Here's the code where I want to pass the FormData 
//(I'm having trouble indenting it here) 
    $.ajax({ 
     url: "url", 
     type: "GET", 
     dataType: "json", 
     success: function(data) { 
     //Create a JSON object to send other form inputs 

     /* 
     fctA is used to avoid duplicating AJAX POST requests since I 
     need to send the data only when meeting some expectations and 
     I must display error messages otherwise. 
     */ 
     fctA(json, formObject) 
     /* 
     The image is correctly sent if I have a POST request that 
     uses formData right here instead of passing it to fctA. 
     As soon as the POST request leaves the submit function to go to fctA though, 
     formData is undefined when I execute the code. 
     I tried passing formObject or formData, they are both undefined. 
     */ 
    }, 
    error: function() { 
     //Display an error message 
    } 
}); 
+0

我沒有看到傳遞formData的問題。你可以請張貼相關的代碼? – mm759

+0

@ mm759我已經用ajax調用更新了問題,我在其中使用formData。 – Batman

回答

0

我不知道到底爲什麼它不工作,但它可能是由你的variable scopes引起的。 formObjectformData是全局變量,因爲您不用var來聲明它們。在ajax-request成功的情況下,由ajax-success-handler調用fctAformObject傳遞給fctAformObject從哪裏來?人們可能期望它在全球範圍內可用。由於某些原因,這似乎並非如此。

我推薦使用var在本地聲明變量,我想大多數人會同意。全局變量允許任意代碼之間的影響難以忽略,難以管理,實際上很難維護。全局變量也增加了意外給出兩個變量的風險,這兩個變量的意思是不同的變量。

如果你在本地聲明你的變量,那麼你可以用formObject作爲參數將你的調用打包到$ .ajax中,並在提交處理程序中調用這個函數。因爲Javascript支持閉包,所以在ajax-success-handler中也可以使用formObject。因此,如果您使用可變範圍,推薦的方法很可能不會再出現問題。

+0

感謝您的回覆,但是,即使問題可能來自變量作用域,我不認爲它與'formObject'的聲明相關聯,因爲它是用'var'聲明的,查看後面的逗號第三行和'formData'聲明後的分號。所以ajax調用已經被封裝在一個函數中,它的'formObject'作爲參數,並且是'fctA'。雖然,當我把'fctA'外面的ajax調用,圖像被正確地上傳。問題可能是因爲formData有點奇怪(例如,你不能用console.log看到它的內容) – Batman

+0

啊,我錯過了逗號。 – mm759

0

好吧我找到了解決方案,問題是我將formData傳遞給了一個函數,該函數有一個關鍵字參數作爲最後一個參數,因此formData是關鍵字參數的值(因爲在該調用中使用了默認值)當然,我期望我的formData的參數是未定義的。

我應該刪除整個問題嗎?因爲它幾乎不過是一個拼寫錯誤問題?如果您刪除了太多的問題,可能會阻止告知您帳戶的警告。

相關問題