是否可以从用户浏览器向另一个api发送Web请求,然后处理发回的结果?
即时尝试下面的ajax代码,但它不起作用,我想知道它是否可能,如果它是一个是的我怎么能实现它...
$(document).ready(function() {
$.ajax({
type: "GET",
url: "http://api.ipinfodb.com/v2/ip_query.php?key=a9a2b0ec2c4724dd95286761777b09f1c8e82894de277a5b9d7175fa5275f2da&ip=&output=xml",
dataType: "xml",
success: function(xml) {
alert("sucess");
$(xml).find('Ip').each(function() {
var ip = $(this).find('Ip').text();
alert(ip);
});
}
});
});
答案 0 :(得分:2)
由于same origin policy restriction,您仅限于将AJAX请求发送到您自己的域。 JSONP是一种常见的解决方法,但远程站点需要支持它。另一个解决方法是在您的域上创建服务器端脚本,该脚本将充当您的域和远程域之间的桥梁,它将简单地委派从javascript发送给它的AJAX请求。
答案 1 :(得分:1)
应该可以,我已经做了同样的事情。
但是您必须将页面放在同一台服务器上,您不能向另一台服务器发送请求,在这种情况下,您必须使用服务器上的代理来转发呼叫。
答案 2 :(得分:1)
只是添加到已经说过的内容:如果您无法创建自己的JSONP代理,则可以使用YQL service为您创建该代理。请注意,YQL将使用它自己的元数据包装您的数据(除非有一种方法可以禁用它...)。
顺便说一下,您应该使用JSON输出而不是API服务的XML输出。 JSON是一种更轻量级的格式,因此更适合Web。
下面是一个包含API URL(此次输出JSON)和YQL的完整功能示例:
var apiRequestUrl = "http://api.ipinfodb.com/v2/ip_query.php?key=a9a2b0ec2c4724dd95286761777b09f1c8e82894de277a5b9d7175fa5275f2da&ip=&output=json";
var yqlRequestUrl = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%20%3D%20%22";
yqlRequestUrl += encodeURIComponent(apiRequestUrl);
yqlRequestUrl += "%22&format=json&callback=?";
$.getJSON(yqlRequestUrl,
function(jsonData) {
alert(jsonData.query.results.json.Ip);
});
最后,这篇文章可以派上用场:http://www.wait-till-i.com/2010/01/10/loading-external-content-with-ajax-using-jquery-and-yql/