Json在alert语句和函数之间不一致

时间:2012-04-02 05:58:50

标签: javascript json variables

我有一个返回json的函数(networks_function.php构建了一些数组并将它们编码为json):

var json;
$(document).ready(function(){
    $.post("network_function.php", function(data) {
        json = data;
        alert(json);
    });
});

我将json变量传递给一个不能正确解释的新函数。但是,当我复制alert语句的文本并将其硬编码到第二个函数中(并将其设置为等于json变量)时,它可以工作。我确信这不是可变范围的问题。有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

它认为这不是JSON。告诉jQuery它是JSON数据:

var json;
$(document).ready(function(){
    $.post("network_function.php", function(data) {
        json = data;
        alert(json);
    }, "json");
});

复制和粘贴它的原因是因为粘贴到JS上下文中的JSON字符串是一个对象文字。当您警告实际对象(这是您想要提醒的对象)时,您将看到“对象”,可能还有一些调试信息,具体取决于浏览器。

请注意,您可以(也应该)在PHP文件中发送json标头

header("Content-Type: application/json");

答案 1 :(得分:0)

我看到你在后端使用php。 你可能想这样做:

后端:

$dataToSend = array("item1"=>"data1","item2"=>"data2");
echo json_encode($dataToSend);

然后,您可以将jQuery中的“数据”作为JSON对象获取。 如果php将其作为字符串返回 只是做:

json = JSON.parse(data);

你的php大多没有正确返回json,所以回显你的字符串周围的引号可能是个问题。返回JSON时在php中使用正确的引号会很麻烦,因此对数组使用json_encode()将是最简单的方法。