为什么我的JSON功能不起作用?

时间:2011-12-14 21:00:51

标签: php javascript json

我有一个函数调用未到达服务器的远程服务器上的php页面。这个功能一直工作,直到我今天检查它,当客户告诉我计数器没有更新。传入的参数是一个字符串,警报显示参数ok,但res.counterValue值不会从php页面返回。

function getCounterJSON(param) {
    //alert('param: '+ param);
    $.getJSON('http://domainname/path/view.php?callback=?', 'counter=' + param, function(res) {
        //alert('return value '+res.counterValue);
        document.getElementById(param).innerHTML = '&nbsp&nbsp&nbsp' + res.counterValue + ' views';
    });
}

PHP页面上的回调函数

{
    echo $_GET['callback'] . '(' . "{'counterValue' : $counterValue}" . ')';
}

counterValue也从db ok中检索。

3 个答案:

答案 0 :(得分:2)

Oy公司...

只需在服务器端使用json_encode

echo json_encode(array('counterValue'=>$counterValue));

答案 1 :(得分:1)

您应该使用json_encode而不是构建自己的JSON,如下所示:

echo json_encode(array('counterValue' => $counterValue));

除非您使用JSONP(并且您没有,因为jquery.AjaxdataType参数未设置为"jsonp"),您不需要回调

除此之外,你的代码不起作用的原因是它用单引号(')分隔字符串。根据{{​​3}},字符串必须用双引号括起来(")。

此外,您应该使用DOM函数(或其jQuery等效项,例如append)而不是innerHTML

无论哪种方式,HTML实体都必须以分号结尾;你想要 (虽然有些浏览器也会渲染无效的&nbsp)。

答案 2 :(得分:0)

您真正的问题是您没有返回JSON,而这正是$.getJSON所期望的。您正在返回JavaScript。请改用$.get


其他人对于用json_encode编码json是正确的。不要自己建立json。