2015-08-30 66 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

相關問題