我有一个json外部api我打电话。然而,响应以json的形式返回,如果我的数据类型不是jsonp,则api会因访问控制问题而失败。
我可以和邮递员一起打电话给api。收到回复很好。但是在控制台中我得到unexpected token ':'
继承我的ajax电话
$.ajax({
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
},
type: 'GET',
dataType: 'jsonp',
url: 'URL' + somevarhere,
success: function(json) {
debugger
for (var i = 0; i < json.results.length; i++) {
var section = json.results[i].name;
var tid = json.results[i].Id.slice(1);
var price = json.results[i].minPrice;
var url = json.results[i].url;
var button =
"<a class='btn btn-info'>Buy Now</a>";
$("#tableid").append("<tr><td><img id='theImg' src='/assets/logo.png'/></td><td><b>" + section +
"</b></td><td><b> In Stock </b></td><td><b>£" + price + "</b></td><td><b>N/A</b></td><td><b>£" + price + "</b></td><td><b>" + button + "</b></td></tr>");
$("#tableid").find(".btn.btn-info").click(function() {
location.href = $(this).attr("data-url");
});
}
sortTable();
},
error: function(error) {
debugger
console.log(error);
}
});
如果我交换数据类型,我会得到no access origin
错误
任何想法?
好的邮递员我得到了这个回复
{"details":{"totalResults":3,"totalPages":1,"currentPage":1,"resultsPerPage":50},"results":[{"eventId":2148477, So on so forth
萨姆
答案 0 :(得分:0)
如果您从API接收JSONP,那么您的内容类型应该是javascript,而不是json。
所以
xhr.setRequestHeader("Accept", "application/json");
应该是
xhr.setRequestHeader("Accept", "application/javascript");
如果能解决您的问题,请告诉我。
答案 1 :(得分:0)
您的JSONP响应无效。 JSON应该包含在一个名为callback
请求参数的回调函数中,例如:
callback({a: 1, b: 2});
答案 2 :(得分:0)
您的实际回复包含json
而非jsonp
。
使用您当前的网址('URL' + somevarhere
),您就会遇到问题。但是,您可以使用(https://crossorigin.me/)服务来避免此问题。
然后,您应该请求:«https://crossorigin.me/('URL' + somevarhere
)»。
尝试使用此服务。
希望这有帮助。