2011-02-18 53 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>