2011-07-09 20 views
0

我使用這個版本的jQuery表格插件https://raw.github.com/malsup/form/master/jquery.form.js 的獲得上提交的錯誤:jQuery的形式上傳錯誤

錯誤就行form.submit();

SCRIPT87: Invalid argument. jquery.form.js, line 347 character 5 

我的代碼:

<form id="ajaxUploadForm" action="@Url.Action("Upload", "Home")%>" method="post" enctype="multipart/form-data" > 
    <fieldset> 
     <legend>Upload a file</legend> 
     <label>File to Upload: <input type="file" name="file" /></label> 
     <input id="ajaxUploadButton" type="submit" value="Upload" /> 
    </fieldset> 
</form> 

$(function() { 
     $("#ajaxUploadForm").ajaxForm({ 
      iframe: true, 
      dataType: "json", 
      beforeSubmit: function() { 
       // $("#ajaxUploadForm").block({ message: '<img src="/Content/themes/start/images/progress.gif" />' }); 
      }, 
      success: function (result) { 
       // $("#ajaxUploadForm").unblock(); 
       //$("#ajaxUploadForm").resetForm(); 
       $.growlUI(null, result.message); 
      }, 
      error: function (xhr, textStatus, errorThrown) { 
       //$("#ajaxUploadForm").unblock(); 
       //$("#ajaxUploadForm").resetForm(); 
       $.growlUI(null, 'Error uploading file'); 
      } 
     }); 
    }); 

我我在側面的簡單模型對話框中做這個上傳。

可能有人會有任何想法如何解決這個問題?

回答

1

如果您發佈到正在返回JSON的控制器動作,您可能需要將其包裝在一個<textarea>標籤,如文檔中解釋說:

因爲它是不可能使用上傳 文件瀏覽器 XMLHttpRequest對象,表單插件 使用隱藏的iframe元素來幫助 與任務。這是一種常見的 技術,但它有內在的侷限性 。的IFRAME元素被用來作爲 窗體的 提交操作的目標,這意味着 服務器響應被寫入 iframe中。如果響應 類型爲HTML或XML,但如果響應類型爲腳本 或JSON,兩者通常都包含 字符需要轉用 在發現時使用實體引用,則無效 HTML標記。

要佔 腳本和JSON響應的挑戰,形式 插件允許這些反應是 嵌入到textarea元素,它 建議您在 一起選擇使用時 這樣做這些響應類型與文件上傳。但請注意,請注意,如果表單中沒有 文件輸入,則 請求將使用正常的XHR來提交 表單(不是iframe)。這會使您的服務器代碼的 負擔知道 何時使用textarea,何時不使用 。如果你願意,你可以使用插件的iframe選項 它總是使用iframe模式和 ,那麼你的服務器總是可以在文本區域中嵌入 響應。

+0

問題是提交不出現,我把斷點,並在調試下檢查它,它不提交,還查看了提琴手以確保請求不會去別的地方,根本沒有請求,由於某種原因,它只是提交失敗。嗯...順便說一句,我已經包裹在我的控制器響應 – Joper

+0

@Joper,嗯,這很奇怪。你有沒有試過以正常形式做這件事(jQuery對話框中沒有一個)? –

+0

在Mozilla嘗試了另一個瀏覽器(Mozilla的最新版本),它發送請求(可以在Fidder中看到它,但是在調試時我沒有看到控制器上發出的請求),但得到錯誤「ReadResponse()失敗:服務器沒有返回這個請求的響應'。之前試圖Opera最新和IE最新 – Joper