接受json的意外令牌

时间:2016-01-11 16:55:54

标签: javascript jquery json ajax

我有一个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

萨姆

3 个答案:

答案 0 :(得分:0)

如果您从API接收JSONP,那么您的内容类型应该是javascript,而不是json。

Cast

所以

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)»。

尝试使用此服务。

希望这有帮助。