我正在使用jquery $.ajax();
函數發佈表單的數據, 以獲取我使用的表單的數據new FormData
,因爲在我的表單中也有一個輸入文件。爲什麼FormData後禁用html字段?
問題是我已禁用我的表格中的字段,通常不會發布,但如果我使用新的FormData
他們是。
如何解決這個問題?我不需要發佈禁用的輸入字段!
我正在使用jquery $.ajax();
函數發佈表單的數據, 以獲取我使用的表單的數據new FormData
,因爲在我的表單中也有一個輸入文件。爲什麼FormData後禁用html字段?
問題是我已禁用我的表格中的字段,通常不會發布,但如果我使用新的FormData
他們是。
如何解決這個問題?我不需要發佈禁用的輸入字段!
我不太瞭解新的FormData,但這裏有一個替代解決方案。如果您的表單不包含太多字段,請使用$ .ajax()調用的數據屬性並將所需字段及其值僅發送到服務器。語法示例會像下面
$.ajax({
type: "POST" OR "GET",
url: "/someUrl",
data:
{
'id' : $('#empId').val(),
'name' : $('$empName').val()
} ,
dataType: "json",
success: function(result){
alert(result);
}});
OP表示他的表單確實包含'',你的方法不適用。這個問題*是關於'Formdata'的... * – Bergi
然後我們可以使用「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更多信息 –
@Makesh:是的,這正是OP所做的,但是他遇到了問題。 – Bergi
如何,只有等領域建設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);
問題是我在我的表格太已經禁用領域,那些通常不貼了,但如果我使用
new FormData
他們。
根據XHR和HTML5,他們確實不能序列化。您應該針對那些瀏覽器提交錯誤。
如何解決這個問題?我不需要發佈禁用的輸入字段!
我只是不需要它們,等待修復。如果你需要它們被忽略,你可以嘗試以下解決方法:
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
。
爲什麼你使用'new'關鍵字,除了在使用new關鍵字之後,你可以再次禁用這些字段,dnt它會起作用 – HarshSharma
問題1是你需要那些被禁用的字段嗎?問題二,因爲輸入字段通過append方法添加到FormData對象中 - 您是否將這些禁用的字段添加到FormData對象? –
您能否請[編輯]您的帖子向我們展示您使用的代碼? – Bergi