0

我将一个变量传递给一个 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",
    });
});

这是错误:无效标签错误源行:[Break On This Error]
{"code":200,"status":"Ok","data":{"offset":0,"limit":500,"总计":17,"目标":"ch...

4

2 回答 2

3

删除:contentType: "application/json;charset=utf-8"从您的请求中。您也可以使用该$.getJSON()方法,它是您所写内容的简写。并且不要忘记从您的点击处理程序中返回 false ,否则您的调用可能永远没有时间在浏览器跟随href被点击的锚点重定向离开之前执行。另一个要注意的是,您应该使用'&callback=?'而不是'?callback=?'在 url 中,因为显然您已经有了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=?意味着您尝试调用的 API 必须支持JSONP 。否则,您的呼叫将始终失败,因为您违反了同源策略限制。

于 2012-07-18T16:53:43.193 回答
0

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

于 2012-07-18T17:00:08.060 回答