尝试从Web服务获取JSON数据时出错

时间:2014-11-27 10:04:03

标签: jquery ajax json jsonp jquery-ajaxq

我的客户向我提供了一个返回json数据的webservice链接。我浏览了它并得到了一个好结果。但是当我创建一个简单的html页面并使用jquery ajax

        var myCallback = function (data) {
            alert("Data:" + data);
        };

var url = "http://xxx/getToken";        

var params = { username: "abc", password: "123" }

        $.ajax({
            type: "GET",
            url: url,
            data: params,
            contentType: "text/plain",
            dataType: 'jsonp',
            crossDomain: true,
            cache: false,
            success: myCallback,
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(errorThrown);
                alert(XMLHttpRequest.responseText);
            },
            async: false
        });

它总是返回错误“NetWorkError”,但是我跟踪了FIDDLE的结果,结果显示为浏览器???

当我将url更改为例如:

        var url = "http://api.openweathermap.org/data/2.5/weather";
        var params = { lat: "35", lon: "139" }

效果很好!....我不知道IIS配置或Jquery Ajax库到底是什么问题。

你有解决这个问题的解决方案吗?

感谢!!!

2 个答案:

答案 0 :(得分:0)

问题在于你 A)使用JSONP,你应该使用JSON,
JSONP只是一种发送JSON数据的技术 B)异步被设置,所以你的broswer期望在它发送请求时的响应,
这应该等待回应。

所以试试这个

   var myCallback = function (data) {
        alert("Data:" + data);
    };
var url = "http://xxx/getToken";        
var params = { username: "abc", password: "123" }
    $.ajax({
        type: "GET",
        url: url,
        data: params,
        contentType: "text/plain",
        dataType: 'json',
        crossDomain: true,
        cache: false,
        success: myCallback,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
            alert(XMLHttpRequest.responseText);
        },
        async: true
    });

答案 1 :(得分:0)

最后,我找到了解决这个问题的解决方案。这里的主要问题是跨站点访问数据策略。我的客户的api服务不包括在内:

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST

因此,浏览器不允许我的ajax请求获取json数据。手动,我必须打开(IE)互联网设置中的设置 - >其他 - >跨域访问数据源(设置为启用)以获取数据

结论,我们必须将这些添加到标题中以获得优先级,然后将浏览器设置添加到标题中