2016-01-11 2 views
-1

У меня есть json external api, я звоню. Однако ответ возвращается как json, и если у меня нет типа данных как jsonp, Api не справляется с проблемой контроля доступа.неожиданный токен на accept json

Я могу ударить по афи с почтальоном. И получите ответ штраф. Однако в консоли я получаю unexpected token ':'

Heres мой Аякса вызов

$.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 ошибки

Есть идеи?

Ok в почтальона я получаю этот ответ

{"details":{"totalResults":3,"totalPages":1,"currentPage":1,"resultsPerPage":50},"results":[{"eventId":2148477, So on so forth 

Сэм

+0

Можете ли вы воспроизвести свою проблему в jsfiddle? (https://jsfiddle.net/) –

+0

Не удается получить HTTP https-ошибку в ссылке api. –

+0

Можете ли вы показать URL-адрес api? –

ответ

0

Ваш фактический ответ содержит json и не jsonp.

С вашим текущим адресом ('URL' + somevarhere) у вас возникли проблемы с cors. Однако вы можете использовать службу (https://crossorigin.me/), чтобы избежать этой проблемы.

Затем необходимо запросить «https://crossorigin.me/ ('URL' + somevarhere)».

Попробуйте использовать эту услугу.

Надеюсь, это поможет.

0

Если вы получаете JSONP от API, то ваш тип контента должен быть JavaScript, не JSON.

Check out this for reference.

Так

xhr.setRequestHeader("Accept", "application/json"); 

должен быть

xhr.setRequestHeader("Accept", "application/javascript"); 

Позвольте мне знать, если это решит проблему.

+0

Нехорошо, По-прежнему такая же ошибка я продолжаю получать. –

0

Ваш ответ JSONP недействителен. JSON должны быть завернуты в обратном вызове с именем из callback параметра запроса, например:

callback({a: 1, b: 2}); 
+0

И могу ли я сделать это в ajax? –

+1

@SamRoberts Ваш код JavaScript хорош, вам нужно изменить код, который генерирует ответ JSONP. Если вы не можете изменить код API, я боюсь, вы не сможете получить его с помощью AJAX из-за политики одинакового происхождения. –

Смежные вопросы