2014-01-31 51 views
1

我正在使用jquery $.ajax();函數發佈表單的數據, 以獲取我使用的表單的數據new FormData,因爲在我的表單中也有一個輸入文件。爲什麼FormData後禁用html字段?

問題是我已禁用我的表格中的字段,通常不會發布,但如果我使用新的FormData他們是。

如何解決這個問題?我不需要發佈禁用的輸入字段!

+0

爲什麼你使用'new'關鍵字,除了在使用new關鍵字之後,你可以再次禁用這些字段,dnt它會起作用 – HarshSharma

+0

問題1是你需要那些被禁用的字段嗎?問題二,因爲輸入字段通過append方法添加到FormData對象中 - 您是否將這些禁用的字段添加到FormData對象? –

+0

您能否請[編輯]您的帖子向我們展示您使用的代碼? – Bergi

回答

0

我不太瞭解新的FormData,但這裏有一個替代解決方案。如果您的表單不包含太多字段,請使用$ .ajax()調用的數據屬性並將所需字段及其值僅發送到服務器。語法示例會像下面

$.ajax({ 
type: "POST" OR "GET", 
url: "/someUrl", 
data: 
{ 
    'id' : $('#empId').val(), 
    'name' : $('$empName').val() 
} , 
dataType: "json", 
success: function(result){ 
    alert(result); 
}}); 
+0

OP表示他的表單確實包含'',你的方法不適用。這個問題*是關於'Formdata'的... * – Bergi

+0

然後我們可以使用「multipart/form-data」技術來發送數據。請參閱職位http://stackoverflow.com/questions/4526273/what-does-enctype-multipart-form-data-mean和http://stackoverflow.com/questions/5392344/sending-multipart-formdata-with -jquery-ajax更多信息 –

+0

@Makesh:是的,這正是OP所做的,但是他遇到了問題。 – Bergi

1

如何,只有等領域建設FormData你想:

// New FormData, get form and inputs 
var payload = new FormData(), 
    $form = $("form") 
    $inputs = $("input", $form); 

// For each input 
for (var i = 0, l = $inputs.length; i < l; i++) { 
    // Cache jQuery selector for input and get disabled attr 
    var $input = $(inputs[i]), 
     disabled_attr = $input.attr("disabled"); 

    // If the disabled attr is undefined or false 
    // see http://stackoverflow.com/questions/1318076/jquery-hasattr-checking-to-see-if-there-is-an-attribute-on-an-element 
    if (disabled_attr === "undefined" || disabled_attr === false) { 

     // Append the key value pair to the FormData 
     payload.append($input.attr("name"), $input.attr("value")); 
    } 
} 

您現在應該可以使用data提交FORMDATA上$.ajax。如果失敗,你可以使用JavaScript的香草提交:

var xhr = new XMLHttpRequest(); 
xhr.open("POST", url, true); 
xhr.send(payload); 
0

問題是我在我的表格太已經禁用領域,那些通常不貼了,但如果我使用new FormData他們。

根據XHRHTML5,他們確實不能序列化。您應該針對那些瀏覽器提交錯誤。

如何解決這個問題?我不需要發佈禁用的輸入字段!

我只是不需要它們,等待修復。如果你需要它們被忽略,你可以嘗試以下解決方法:

var $form = /* whatever you have */; 
var $inputs = $form.find(":disabled").each(function() { 
    $(this).data("xhr-name", this.name); 
    this.name = ""; // fields with empty names must be ignored as well 
}); 
var formdata = new FormData($form[0]); 
$inputs.each(function() { 
    this.name = $(this).data("xhr-name"); 
}); 

如果沒有工作,你可以一)完全分離從DOM中輸入並在以後恢復它們,或b)手動構造FormData