为什么我的数组被错误地转换为jsonp数据


Why is my array being converted incorrectly to jsonp data?

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 });

数组发布:['"后1 '",'"后2 '",'"后3 ']

出了什么问题,为什么数据没有转换成json并作为json提交?

当我调用databack时,我调用它作为jsonp包装在回调函数

您忘记在$.post上设置dataType

$.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';

您在进行双重编码。将实际数组传递给$.post,而不是JSON字符串。

$.post("http://www.foobar.com/write.php", { 'array': sv_defaultArray });

您实际上正在做的是将JSON对象转换为字符串,然后将JSON对象的字符串表示形式发送到服务器。这就是为什么双引号要转义;字符串中的双引号需要按照JSON规范中的描述进行转义。

所以当你执行{'array':myJsonString}时你实际上得到以下JSON表示:

{'array': "['POST1', 'post2', 'post3']"}

注意'array'实际上是字符串类型。

如果您希望您的数据作为JSON数组被post,只需这样做:

{'array':sv_defaultArray}