来自用户浏览器的Web请求

时间:2011-01-19 10:50:02

标签: c# jquery asp.net-mvc ajax browser

是否可以从用户浏览器向另一个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);

                });
            }
        });

    });

3 个答案:

答案 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/