2015-08-30 46 views
1

如何向使用jQuery ajax的服务器发布表单数据以及其他一些值(即{a:'A',b:'B',c:'C'})?向服务器发布带有额外值的表单数据

HTML代码:

<form id="myForm"> 
    <p>firstname: <input name="firstname" type="text" value="John" /></p> 
    <p>lastname: <input name="lastname" type="text" value="Doe" /></p> 
</form> 

Javascript代码:

var data={a:'A',b:'B',c:'C'}; 
$.post('index.php',data); //This seems to work 

var formData=$('#myForm').serializeArray(); 
$.post('index.php',formData); //This seems to work 

//Wish to post {a:'A',b:'B',c:'C',firstname:'John',lastname:'Doe'} to the server 
//Doesn't work 
$.extend(data, formData); 
console.log(data); 
$.post('index.php',data); 

回答

0

serializeArray()返回设定形式的元素作为名称和值的数组。数据会像格式

[{ name: "name", value: "value" },.....] 

所以你不能使用$.extend()所以你可以做这样的事情

var formData=$('#myForm').serialize(); 

$.each(data,function(i,v){ 
    formData+='&'+i+'='+v; 
}); 
console.log(data); 
$.post('index.php',formData); 

var formData=$('#myForm').serializeArray(); 

$.each(data,function(i,v){ 
    formData.push({name:i,value:v}); 
}); 
console.log(data); 
$.post('index.php',formData); 

或定义数组一样的序列化阵列

var newData = [{name:"a", value:"A"}, {name:"b", value:"B"}]; 
formData=$.merge(formData,newData); 
$.post('index.php',formData); 
+0

想我可以单独推'{A: 'A',B: 'B',C: 'C'}',但似乎应该有一个更好的办法。有没有替代'serializeArray()'不返回数组名/值? – user1032531

0

使用$ .merge和转换你的对象到一个数组结构,

var newData = []; 
$.each(data, function(k, v) { 
    newData.push({name:k, value:v}); 
}); 
formData=$.merge(formData,newData); 
console.log(data); 
$.post('index.php',data); 
1

尝试利用.each()form迭代input元素,在现有data对象设置的inputthis.name财产的inputthis.value

var data = { 
 
    a: "A", 
 
    b: "B", 
 
    c: "C" 
 
}; 
 

 
$("form input").each(function() { 
 
    data[this.name] = this.value 
 
}); 
 

 
console.log(data); 
 

 
// $.post("index.php", data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<form id="myForm"> 
 
    <p>firstname: 
 
    <input name="firstname" type="text" value="John" /> 
 
    </p> 
 
    <p>lastname: 
 
    <input name="lastname" type="text" value="Doe" /> 
 
    </p> 
 
</form>

+0

那么,没有'serializeArray()'?什么时候应该使用'serializeArray()'?为什么不总是这样做,从不使用'serializeArray()'? – user1032531

+0

@ user1032531'.serializeArray()'创建包含多个对象的数组,问题中的需求看起来像是包含所有属性的值的单个对象,值 – guest271314

+0

两者都会发布相同的,不是?然而,我确实更喜欢你的解决方案。 – user1032531

1

guest271314可能有最佳答案,但希望对此答案发表意见。

var data=$('#myForm').serializeArray(); 
$.each({a: "A", b: "B", c: "C"},function(n,v){data.push({ name : n, value : v });}); 
console.log(data); 
+0

这似乎是更好的选择,因为'serializeArray()'方法使用标准W3C [**成功控件**](http:// www .w3.org/TR/html401/interact/forms.html#h-17.13.2),这样您将确保禁用的表单输入字段不会被添加,您还包括textareas和选择字段。类型提交的输入字段不会被添加。由于样式表设置而未呈现的隐藏控件和控件可能仍会添加。 – DavidDomain

相关问题