我正在使用以下代码从URL获取数据。
$.ajax({
url: 'http://183.77.251.173:90/api/function/getprice.aspx?code=1301&length=3M',
success: function (data) {
alert(data.results[0].address_components[0].long_name);
},
error: function (jqXHR, exception) {
alert(jqXHR.status);
}
然而,它会引发状态代码为0
的错误。我不知道是什么原因造成的?我也尝试设置crossDomian:true
,但它仍然会抛出相同的错误。
我还将网址修改为http://www.google.com
,同时返回错误状态代码0
。为什么?是什么原因?从远程URL获取数据的正确方法是什么?
答案 0 :(得分:2)
除非您使用的是JSONP或CORS,否则无法发出跨域请求。这些的可用性取决于您请求信息的域的API。
这是现代浏览器的安全功能,称为Same Origin Policy。
答案 1 :(得分:0)
使用填充(或JSONP)查找JSON,因为你使用jQuery,你应该看看这里:http://api.jquery.com/jQuery.getJSON/
来自该网站的被盗案例:
<script>
(function() {
var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON( flickerAPI, {
tags: "mount rainier",
tagmode: "any",
format: "json"
})
.done(function( data ) {
$.each( data.items, function( i, item ) {
$( "<img/>" ).attr( "src", item.media.m ).appendTo( "#images" );
if ( i === 3 ) {
return false;
}
});
});
})();
</script>
编辑:
一个自制示例,使用jquery.jsonp-2.4.0获得更好的错误响应(https://github.com/jaubourg/jquery-jsonp/downloads)。但你也可以使用普通的jQuery。
在客户端,你需要这样的东西:
$.jsonp({
"url": target_url+"ping.php?callback=?",
"success": function(data) {
// print out data
},
"error": function(d,msg) {
// error
}
});
目标服务器上的ping.php文件:
<?php
echo $_GET['callback'] . '(' . "{'response' : 'success'}" . ')';
?>
答案 2 :(得分:-1)
正如其他人所说,你收到错误0是因为网站无法访问。跨站点问题是一个原因。当然,URL也是如此。如果您尝试访问的网址确实有效并且与您的网站位于不同的域中,则表示您遇到跨域问题。
JSONP将成为让它发挥作用的唯一途径,但也有缺点。有关详细解释,请查看SO上的这篇文章:
文章中还有http://www.json.org/JSONRequest.html的链接。我没试过这个,所以不确定它是否有效。
这应该会帮助你。
答案 3 :(得分:-3)
对于跨域使用$.getJSON()
。
$.getJSON('http://183.77.251.173:90/api/function/getprice.aspx?code=1301&length=3M', function(data){
alert(data.results[0].address_components[0].long_name);
});