在以下代码中,有一个以JSON格式返回结果的url。我想阅读JSON并在我的代码中解析它。但是,当我运行代码时,结果为空。似乎我无法发送跨域AJAX请求!
我还尝试通过编写Access-Control-Allow-Credentials: true
在代码中包含xhrFields: { withCredentials: true }, crossDomain: true,
,但它再次无效。它给出以下错误:
Error: jQuery111209679192922043036_1428845360268 was not called
$.ajax(
{
url:"http://ec.europa.eu/semantic_webgate/query/sparql?dataset=rasff&format=json&limit=10&query=select%20?p%20where%20+{+?s%20?p%20?o+}",
dataType:'jsonp',
type:"GET",
success:function(data)
{
alert("Data from Server"+JSON.stringify(data));
},
error:function(jqXHR,textStatus,errorThrown)
{
alert("You can not send Cross Domain AJAX requests : "+errorThrown);
}
});

如何编写jsonp代码来阅读this url?
答案 0 :(得分:4)
对于JSONP,请将dataType:'json'
设置为dataType:'jsonp'
。此外,您的服务器需要了解JSONP。真正支持JSONP的Web服务将读入您URL的强制?callback=?
参数。
以下是适当的JSONP响应:http://ip.jsontest.com/?callback=methodName带响应:
methodName({"ip": "151.194.190.31"});
确定该URL是否支持JSONP和回调名称。如果是这样,请使用回调参数并使用JSONP。没有CORS问题。以下是Fiddle示例。
更多信息:jquery + jsonp return syntax error even when the response is json
将Access-Control-Allow-Origin: *
添加到该URL的响应中(如果可以控制它),并将其作为JSON响应(而不是JSONP)进行处理。
如果该URL不支持JSONP,并且它不允许CORS,那么你可以通过使用一些服务器端代码来欺骗该URL的JSON结果,然后将JSON包装在回调函数中,设置标题为Access-Control-Allow-Origin: *
,并将结果返回给您的AJAX JSONP脚本。很整洁,呵呵?
哦,你走了:
<?php
// xss-service.php - Bare-bones demo by @Drakes
$callback = isset($_GET["callback"]) ? $_GET["callback"] : "?";
$json = file_get_contents('http://ec.europa.eu/semantic_webgate/query/sparql?dataset=rasff&format=json&limit=10&query=select%20?p%20where%20%20%7B%20?s%20?p%20?o%20%7D');
header('Access-Control-Allow-Origin: *');
header("Content-type: application/json");
echo $callback . "(" . $json . ");";
?>
如果您只需要立即使用此功能,则可以使用在线JSONP代理服务,例如Yahoo's YQL service。然后,使用没有JSONP且没有CORS的URL,您可以执行以下操作:
var theUrl = "http://ec.europa.eu/semantic_webgate/query/sparql?dataset=rasff&format=json&limit=10&query=select%20?p%20where%20%20%7B%20?s%20?p%20?o%20%7D";
var yql = 'http://query.yahooapis.com/v1/public/yql?'
+ 'q=' + encodeURIComponent('select * from json where url=@url')
+ '&url=' + encodeURIComponent(theUrl)
+ '&format=json&callback=?';
$.getJSON(yql,
function (data) {
alert(JSON.stringify(data));
}
);