我已阅读了许多相同问题的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');
}
});
永远不会调用 success:
。 error:
返回textStatus
"parsererror"
,errorThrown
为"Error: jQuery1830649454693285679_1359620502896 was not called"
callback=?
添加到网址以解决跨域问题。header('Content-Type: application/json');
发送到php,它返回NO html。data: "json"
,因为有些答案说,但仍然会返回parsererror
答案 0 :(得分:4)
您的服务器和客户端脚本不相互补充。您有两种选择:
让服务器端脚本返回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)
);
答案 1 :(得分:2)
我只是尝试,这是在跨域测试的解决方案
$.ajax({
type : "GET",
url : "http://******/14621356.php",
data : {get_param : "Announcement"},
dataType : "jsonp",
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');
}
});
对于php
header('Content-Type: application/json');
echo $_GET['callback'].'('.'{"Announcement":{"ID":1,"Type":1,"Text":"This is a test Albums announcement.","TimeStart":"1969-12-31","TimeEnd":"1969-12-31"}}'.')';
在dataType中处理jsonp。