2012-07-18 68 views
0

我正在将一个变量传递给一个URL,该URL随后会调用通过所传递变量过滤的API。但是,我似乎无法加载JSON,并在JS中的Firebug控制台中返回无效错误。思考?使用jQuery检索JSON API时出现无效错误

$("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,”limit“:500,”total“:17,”target“:”ch ...

回答

3

删除:contentType: "application/json;charset=utf-8"您也可以使用$.getJSON()方法,它是你已经写了,并且不要忘记从你的点击处理程序返回false,否则你的调用可能永远没有时间执行,然后浏览器重定向到锚点的href之后被点击。另一个需要注意的问题是,您应该在url中使用'&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限制。

+0

我明白了,谢谢你的见解。在这种情况下,如果我删除回调=?字符串中的URL,警报不会触发(没有任何反应)。我在本地工作并从另一台服务器请求API。我认为JSONP是解决这个问题的方法,但是我可能会错过一些东西,因为我对JSON – Yasir 2012-07-18 17:05:15

+0

的问题还很陌生,如何检查JSONP支持? – Yasir 2012-07-18 17:06:39

+0

是的,如果您尝试执行跨域AJAX调用,则可以使用JSONP(如果远程服务支持它)。如果没有,则不能从脚本中调用它。为了检查远程服务是否支持JSONP,有两种方法:1.阅读你尝试使用的API的文档。 2.您试图在浏览器中输入一个示例请求:'http://api.example.com?limit = 500&callback = abc'并观察返回的JSON是否会被封装在'abc'函数中。如果不存在两种可能性:1.远程服务器不支持JSONP或... – 2012-07-18 17:07:19

相关问题