Javascript 为什么FormData后期禁用html字段?

Javascript 为什么FormData后期禁用html字段?,javascript,jquery,ajax,form-data,disabled-input,Javascript,Jquery,Ajax,Form Data,Disabled Input,我正在使用jquery$.ajax()用于发布表单数据的函数, 为了获取表单的数据,我使用了newformdata,因为在我的表单中也有一个输入文件 问题是我在表单中也禁用了字段,这些字段通常不会发布,但如果我使用newFormData则会发布 如何解决这个问题?我不需要发布禁用的输入字段 我对新FormData了解不多,但这里有一个替代解决方案。如果表单中没有太多字段,请使用$.ajax()调用的data属性并仅将所需字段及其值发送到服务器。示例语法如下所示 $.ajax({ type: "P

我正在使用jquery
$.ajax()用于发布表单数据的函数,
为了获取表单的数据,我使用了
newformdata
,因为在我的表单中也有一个输入文件

问题是我在表单中也禁用了字段,这些字段通常不会发布,但如果我使用new
FormData
则会发布


如何解决这个问题?我不需要发布禁用的输入字段

我对新FormData了解不多,但这里有一个替代解决方案。如果表单中没有太多字段,请使用$.ajax()调用的data属性并仅将所需字段及其值发送到服务器。示例语法如下所示

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

如何仅使用所需字段构建
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"));
    }
}
问题是我在表单中也禁用了字段,这些字段通常不会过账,但如果我使用
newformdata
则会过账

根据和,它们确实不能被序列化。你应该针对那些浏览器提交一个bug

如何解决这个问题?我不需要发布禁用的输入字段

我想你只是不需要它们,等待修复。如果需要省略它们,可以尝试以下解决方法:

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");
});

如果这两者都不起作用,您可以a)完全分离DOM中的输入并在以后恢复它们,或者b)手动构建
FormData

为什么要使用
new
关键字,除了使用new关键字后,还可以编写代码来再次禁用字段,dnt它将起作用问题1是您需要这些禁用的字段吗?第二个问题,由于输入字段是通过append方法添加到FormData对象的-您不是在将这些禁用的字段添加到FormData对象吗?请您的帖子向我们展示您正在使用的代码好吗?OP说他的表单确实包含
s,而您的方法无法使用。这个问题是关于
Formdata
…然后我们可以使用“多部分/表单数据”技术发送数据。有关更多信息,请参阅帖子和info@Makesh当前位置是的,这正是OP所做的,但他遇到了问题。
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");
});