var sv_defaultArray = new Array([]);
sv_defaultArray[0] = "post 1";
sv_defaultArray[1] = "post 2";
sv_defaultArray[2] = "post 3";
控制台声明此处的数组为 [“post 1”,“post 2”,“post 3”] ;
var myJsonString = JSON.stringify(sv_defaultArray);
控制台声明此处的数组为 [“post 1”,“post 2”,“post 3”] ;
$.post("http://www.foobar.com/write.php", { 'array': myJsonString });
数组发布为: [\“post 1 \”,\“post 2 \”,\“post 3 \”]
出了什么问题,为什么数据没有转换为json并以json的形式提交?
当我调用databack时,我将其称为包含在回调函数中的jsonp
答案 0 :(得分:1)
您忘记在dataType
$.post
$.post("http://www.foobar.com/write.php",
{ 'array': myJsonString },
function(){/* handle results here */},
"json"
);
无论如何,你有普通的数组,所以它将以相同的方式解码。如果需要{}
,则必须对关联数组或对象进行编码。
var data = {field1: 'data1', field2:'data2'};
//or
var data = new Array();
data['field1'] = 'data1';
data['field2'] = 'data2';
答案 1 :(得分:1)
你是双重编码。将实际数组传递给$.post
,而不是JSON字符串。
$.post("http://www.foobar.com/write.php", { 'array': sv_defaultArray });
答案 2 :(得分:1)
您实际在做的是将JSON对象转换为字符串,然后将JSON对象的字符串表示形式发布到服务器。这就是双引号被转义的原因;字符串中的双引号需要按照JSON规范中的描述进行转义。
所以当你做{'array':myJsonString}
时,你实际上得到了以下JSON表示:
{'array': "['POST1', 'post2', 'post3']"}
请注意,'array'
实际上是字符串的类型。
如果您希望将数据作为JSON数组发布,只需执行以下操作:
{'array':sv_defaultArray}