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

时间:2011-08-24 10:08:18

标签: php javascript jquery json

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

3 个答案:

答案 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}