我将一个变量传递给一个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 ...
答案 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。