Javascript为jQuery AJAX创建JSON哈希数组

Den*_*nny 7 javascript ajax jquery json

我拼命想在Javascript中手动创建一个JSON样式的数组,通过jQuery的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(){...
    }
});
Run Code Online (Sandbox Code Playgroud)

我想要的是以下内容:

{fields => [{index:0, name:1, value:2},{...},{...}]}
Run Code Online (Sandbox Code Playgroud)

我得到的是这个:

 {"fields"=>{"0"=>{...}, "1"=>{..}, "2"=>{...}, "3"=>{...}}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Ate*_*ral 8

当您将对象作为data属性传递时,jQuery会将其作为url编码的表单参数(例如foo=bar&moo=too)传递给正文.我想你想要的是通过身体传递JSON.

抓住json2.js 叔叔Crockford写的并使用JSON.stringify(该库为仍然不支持它的浏览器提供功能):

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

别忘了设置contentType属性!在PHP方面,您可以使用json_decode解码原始正文内容:

$fieldsobj = json_decode(@file_get_contents('php://input'));
Run Code Online (Sandbox Code Playgroud)