2011-02-18 29 views
6

我拼命嘗試在Javascript中手動創建JSON樣式的數組,以通過jQuery的AJAX方法通過網絡發送數據。Javascript爲jQuery創建JSON哈希數組AJAX

var fieldsobj = {fields:[]} 
$(".fact_field", fact).each(function(index, field){ 
    var index = $(field).attr("data-index"); 
    var name = $(".fact_field_label", field).text().trim(); 
    var value = $(".fact_field_value", field).text().trim(); 
    fieldsobj["fields"].push({index:index, name:name, value:value}); 
}); 
//... 
$.ajax({ 
    type: 'PUT', 
    url: url, 
    data: fieldsobj, 
    success: function(data){... 
    }, 
    complete: function(){... 
    } 
}); 

我想是這樣的:

{fields => [{index:0, name:1, value:2},{...},{...}]} 

我所得到的是這樣的:

{"fields"=>{"0"=>{...}, "1"=>{..}, "2"=>{...}, "3"=>{...}} 

我在做什麼錯?

回答

7

當您傳遞一個對象作爲data屬性時,jQuery會將其作爲url編碼的表單參數(例如foo=bar&moo=too)傳遞到主體中。我想你想要的是通過身體傳遞JSON。

抓住json2.jswritten by uncle Crockford和使用JSON.stringify(該庫提供的功能爲仍然不支持它的瀏覽器):

$.ajax({ 
    type: 'PUT', 
    url: url, 
    data: JSON.stringify(fieldsobj), 
    contentType: "application/json", 
    success: function(data){... 
    }, 
    complete: function(){... 
    } 
}); 

而且不要忘記設置contentType財產!在PHP端,您可以使用json_decode到原主體內容進行解碼:

$fieldsobj = json_decode(@file_get_contents('php://input')); 
+0

@Darko Z:感謝您將`serialize`修正爲`stringify`。 – 2011-02-18 05:44:17

0

可能有所幫助。

<ul> 
    <li id="p1" data-age="40">John</li> 
    <li id="p2" data-age="28">Jack</li> 
    <li id="p3" data-age="50">Nash</li> 
</ul> 

<script> 
var a = []; 
$("li").each(function(i){ 
    var o = {}; 
    o.id = $(this).attr("id"); 
    o.age = $(this).attr("data-age"); 
    o.name = $(this).text(); 
    a.push(o); 
}); 
console.log(a); 
//var a = [{id:"p1",age:40, name:"John"},{id:"p2",age:28, name:"Jack"},{id:"p3",age:50, name:"Nash"}]; 
</script> 
相關問題