为什么FormData后禁用html字段?
我正在使用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