php – 错误:jQuery1830649454693285679_1359620502896未被称为JSON

我已经阅读了许多相同问题的Q& A,但没有我的具体问题(至少不是我能找到的).

我有一个回复json字符串的PHP脚本

header('Content-Type: application/json');
echo $result;

返回JSON(使用JSONLint检查并且有效):

{"Announcement":{"ID":1,"Type":1,"Text":"This is a test Albums announcement.","TimeStart":"1969-12-31","TimeEnd":"1969-12-31"}}

以及一个读取json的web jquery脚本:

$.ajax({
        type : "GET",
        url : "http://b***s.net/S****s/GetAnnouncements.PHP?callback=?",
        data : {get_param : "Announcement"},
        dataType : "json",
        error : function(jqXHR, textStatus, errorThrown) {alert(errorThrown); alert(textStatus);},
        success : function(data) {alert('success');
            $.each(data, function(index, element) { alert('here');
                $("#announcements-list").append("<li><a id='announcements-a-" + element.ID + "' href='#announcement-details'><p>" + element.Type + ": " + element.Text + "</p></a></li>");
                $("#announcements-a-" + element.ID).bind('click', function() {Announcements.AnnouncementID = element.ID;});
            });
            $("#announcements-list").listview('refresh');
        }
    });

成功:从未被称为.和错误:返回textStatus“parsererror”,errorThrown是“错误:jQuery1830649454693285679_1359620502896未被调用

>我添加了回调=?到网址解决跨域问题.
>我已发送标题(‘Content-Type:application / json’);到PHP,它返回NO HTML.
>我已经用JSONLint验证了JSON的有效性
>我尝试删除数据:“json”正如一些答案所说,但仍然会返回一个parsererror
>使用jQuery 1.8.3

解决方法:

您的服务器和客户端脚本不相互补充.您有两种选择:

使您的服务器端脚本返回JSON:

Content-Type: application/json

{"Announcement":{"ID":1}}

并省略回调参数:

$.ajax({
    type : "GET",
    url : "http://example.com/Feed/json.PHP",
    dataType : "json"
});

使您的服务器端脚本返回JSONP,即JSON包含在回调函数中:

Content-Type: application/javascript

jQuery_xxxxxxxx({"Announcement":{"ID":1}});

并将数据类型更改为jsonp:

$.ajax({
    type : "GET",
    url : "http://example.com/Feed/json.PHP",
    dataType : "jsonp"
});

请注意,jQuery会地将& callback = jQuery_xxxxxxxx附加到此类请求的URL.
服务器应使用URL中指定的回调名称.你可以这样做:

echo sprintf(
    "%s(%s);",
    isset($_GET["callback"]) ? $_GET["callback"] : "void",
    json_encode($data)
);

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...