2014-01-31 27 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