0

我的客户为我提供了一个 Web 服务链接,返回一个 json 数据。我浏览了它并得到了很好的结果。但是当我创建一个简单的 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 库。

你有解决这个问题的办法吗?

谢谢!!!

4

2 回答 2

0

问题是你
A) 在你应该使用 JSON 的地方使用 JSONP,
JSONP 只是一种发送 JSON 数据的技术
B) 异步被设置,所以你的浏览器在它发送请求的那一刻期望得到响应,
虽然它应该正在等待回应。

所以试试这个

   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
    });
于 2014-11-27T10:32:03.807 回答
0

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

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

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

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

于 2014-11-28T01:38:15.563 回答