如何获得jQuery的$ .getJson来处理JSONP结果?

时间:2017-05-19 19:58:37

标签: jquery jsonp getjson

我有以下Javascript代码:

$.getJSON('data.jsonp?callback=abcde', function(data) {
    console.log(data);
})
    .fail(function(jqXHR, textStatus, errorThrown) {
        console.log("error " + textStatus);
        console.log("incoming Text " + jqXHR.responseText);
        console.log(errorThrown);
})

但它会导致parseError。这是传入的文本:

abcde({"data":"value"});

这是错误:

SyntaxError: Unexpected token a in JSON at position 0

我可能错过了一些非常明显的东西,但我已经完成了我的研究并找不到它。有人能说出我错过的东西吗?

1 个答案:

答案 0 :(得分:0)

尝试使用callback=?代替callback=abcde。来自documentation

  

如果URL包含字符串" callback =?" (或类似的,由服务器端API定义),请求被视为JSONP。有关详细信息,请参阅$.ajax()中有关jsonp数据类型的讨论。

jQuery查找此特定字符串,然后替换其内部生成的函数名称。

$.getJSON('data.jsonp?callback=?', function(data) {
    console.log(data);
})
    .fail(function(jqXHR, textStatus, errorThrown) {
        console.log("error " + textStatus);
        console.log("incoming Text " + jqXHR.responseText);
        console.log(errorThrown);
})

如果您需要使用自己的回调函数,我认为您必须使用$.ajax()而不是$.getJSON()快捷方式。

$.ajax({
    url: "data.jsonp",
    type: "get",
    dataType: 'jsonp',
    jsonp: "abcde"
})
    .done(function(data) {
        console.log(data);
})
    .fail(function(jqXHR, textStatus, errorThrown) {
        console.log("error " + textStatus);
        console.log("incoming Text " + jqXHR.responseText);
        console.log(errorThrown);
});