使用jQuery检索JSON API时出现无效错误

时间:2012-07-18 16:51:22

标签: jquery ajax json jsonp

我将一个变量传递给一个URL,然后调用由传递的变量过滤的API。但是,我似乎无法加载JSON,并在JS中的Firebug控制台中返回无效错误。想法?

$("a").click(function() {
    var apiurl = "http://api.example.com" + $(this).text() + "&limit=500" + "?callback=?";

    $.ajax({
        url: apiurl,
        success: function(json) {alert(json.data.results);},
        error: function() { alert("error"); },
        dataType: "json",
        contentType: "application/json;charset=utf-8",
    });
});

这是错误: 标签无效 错误源代码: [打破此错误]
{ “代码”:200, “状态”: “OK”, “数据”:{ “偏移量”:0, “限制”:500, “总”:17, “目标”:“CH ...

2 个答案:

答案 0 :(得分:3)

从您的请求中删除contentType: "application/json;charset=utf-8"。您也可以使用$.getJSON()方法,这是您所写内容的简写。并且不要忘记从您的点击处理程序返回false,否则您的调用可能永远没有时间执行,之后浏览器会在点击的href锚点之后重定向。另一个要注意的是,您应该在网址中使用'&callback=?'而不是'?callback=?',因为显然您已经拥有limit查询字符串参数,因此您只需添加另一个。我想在这种情况下,$(this).text()包含?的某个地方,表示查询字符串的开头:

$('a').click(function() {
    var apiurl = 'http://api.example.com' + $(this).text() + '&limit=500' + '&callback=?';
    $.getJSON(apiurl, function(json) {
        alert(json.data.results);
    });
    return false;
});

此外,我希望您意识到callback=?表示JSONP您尝试调用的API必须支持。否则,您的通话将始终失败,因为您违反了same origin policy限制。

答案 1 :(得分:0)

如果"api.example.com"不在同一个域中,则需要使用dataType: 'jsonp'See jsonp docs以及jQuery.ajax docs