远程网址http://remote-server/json-data.php
包含以下格式的数据:
[{"id":"1","partname":"R1","date":"10/12/2012"},{"id":"2","partname":"R2","date":"10/10/2012"},{"id":"3","partname":"R3","date":"07/12/2012"},{"id":"4","partname":"R4","date":"14/06/2012"}]
这是我的jQuery应该读取上面的数据并将其显示在html或php文件中。目前无效:
$(document).ready(function () {
var url = "http://remote-server/json-data.php";
var success = function(data){
data = $.parseJSON(data);
$.each(data, function(index, element) {
$('div.outerBox').append('<div>'+element.partname+'/'+element.date+'</div>');
});
}
$.ajax({
type: 'GET',
url: url,
dataType: "jsonp",
crossDomain: true,
cache:false,
success: success,
error:function(jqXHR, textStatus, errorThrown){
alert(errorThrown);
}
});
});
当我刷新页面时,我在javascript警告框中收到一条错误消息,如下所示:Error: jQuery142452552225_55355545554 was not called
。
我尝试将该远程文件放入我的本地服务器,它似乎与$.getJSON()
函数一起正常工作。不知道我在这里做错了什么。
答案 0 :(得分:2)
如果服务器未准备好处理JSONP请求,则无法正常工作。
JSONP并不是严格意义上的客户端数据操作,它涉及服务器交互
使用jsonp时,响应应该包含在javascript函数中。
所以为了简单起见,比方说,你有一个空的JSON对象,服务器将返回给你。即{}
为您要做的对象提出标准请求
$.ajax({
type: 'GET',
url: url,
dataType: "json",
success: function(data) {
alert("Retrieved : " + JSON.stringify(data);
},
error:function(jq, st, error){
alert(error);
}
});
所有这一切都是制作标准HTTP请求并从网址中检索空对象。
如果您想将JSONP
与相同的网址一起使用,请尝试使用
$.ajax({
type: 'GET',
url: url,
dataType: "jsonp",
crossDomain: true,
success: function(data) {
alert("Retrieved : " + JSON.stringify(data);
},
error:function(jq, st, error){
alert(error);
}
});
这样做会使您添加的网址?callback={Some Random jQuery function}
。在您的情况下,随机jQuery函数是jQuery142452552225_55355545554
。服务器必须获取该空JSON对象并将其包装在回调中,因此它应该返回{}
而不是返回jQuery142452552225_55355545554({})
,其中包含application / json的HTTP内容类型头。
这是对coderwall的JSON请求的一个小提示,它失败了,然后尝试一个成功运行的JSONP请求。 JSONP Example
答案 1 :(得分:1)
远程网址
http://remote-server/json-data.php
包含数据 这种格式:[{ “ID”: “1”, “零件名称”: “R1”, “日期”: “2012年10月12日”},{ “ID”: “2”, “零件名称”: “R2” , “日期”: “2012年10月10日”},{ “ID”: “3”, “零件名称”: “R3”, “日期”: “2012年7月12日”},{ “ID”:” 4" , “零件名称”: “R 4”, “日期”: “14/06/2012”}]
嗯,这就是问题所在。您的远程URL返回JSON,而不是JSONP。这就是为什么你不能消费它。远程服务器应该返回JSONP:
callbackFunctionName([
{
"id": "1",
"partname": "R1",
"date": "10/12/2012"
},
{
"id": "2",
"partname": "R2",
"date": "10/10/2012"
},
{
"id": "3",
"partname": "R3",
"date": "07/12/2012"
},
{
"id": "4",
"partname": "R4",
"date": "14/06/2012"
}
]);
其中callbackFunctionName
应通过将参数传递给服务器来动态指定。像这样:
http://remote-server/json-data.php?callback=callbackFunctionName
当你调用这个url时,你应该返回一个JSONP响应。