0

我正在尝试完成这项工作,但我不明白为什么这总是返回“请求失败”?json 似乎是有效的(我知道 jQuery 对此很严格),也许是因为 httpS?

var geo_url = "https://spapi.cdnspstr.com/api/get_geo_ip";

var jqxhr = $.getJSON(geo_url, {
    format: "json"
})
.done(function (json_data) {
    alert("currency: " + json_data.data.currency);
})
.fail(function () {
    alert("Request Failed");
});
4

4 回答 4

1

该请求应使用 jsonp 完成,因为不允许跨域 json-ajax 请求

$.ajax("https://spapi.cdnspstr.com/api/get_geo_ip",{
    dataType: 'jsonp',
    success: function(json_data) {
        alert("currency: " + json_data.data.currency);
    },
    error: function() {
        alert("Request Failed");
    }
});
于 2013-07-18T09:54:28.263 回答
1
var geo_url = "https://spapi.cdnspstr.com/api/get_geo_ip";

$.ajax({
    url: geo_url,
    data: {
        format: "json"
    },
    crossDomain: true,
    dataType: 'jsonp',
    success: function (json_data) {
        alert("currency: " + json_data.data.currency);
        alert("city: " + json_data.data.city);
    },
    error: function () {
        alert("Request Failed");
    }
});

小提琴

于 2013-07-18T09:52:34.070 回答
0

这可能是由于JSON 劫持。如果是这种情况,您必须明确允许在服务器端获取 JSON。

我不知道您在服务器端使用哪种技术。如果您使用的是 ASP.NET MVC,则必须允许使用获取 JSONJsonRequestBehavior.AllowGet

于 2013-07-18T09:47:50.597 回答
0

如有疑问,请调试:

var geo_url = "https://spapi.cdnspstr.com/api/get_geo_ip";

var jqxhr = $.getJSON(geo_url, {
    format: "json"
})
.done(function (json_data) {
    alert("currency: " + json_data.data.currency);
})
.fail(function (jqXHR, textStatus, errorThrown) {
    console.log(jqXHR);
    console.log(textStatus);
    console.log(errorThrown);
    alert("Request Failed");
});

如果后端有任何错误(500、403、...),Request Failed无论如何你都会得到。

于 2013-07-18T09:50:05.477 回答