2016-09-10 2 views
0

Я использую вызов ajax для получения данных json из URL-адреса перекрестного домена, используя тип данных «jsonp», но вызывающий функцию функции. Я могу увидеть данные json в mozilla developer -> Network-> response, который появится. Ниже приведен код:мой callback не работает для json-данных из перекрестного домена

$(document).ready(function() { 
$.ajax({ 
url : 'https://www.example.com /fetchdata?param=1', 
type : 'POST', 
crossDomain : true, 
dataType : 'jsonp', 
headers : { 
      'Access-Control-Allow-Origin' : '*', 
      'Access-Control-Allow-Methods' : 'POST' 
     }, 
jsonpCallback : 'callbackdata', 
success : function(data) { 
      alert("success"); 
     }, 
error : function(xhr, status, error) { 
    console.log(error); 
    alert("fail"); 
     }, 
}); 
}); 
function callbackdata(response) { 
     alert(response) 
    } 

получает следующее сообщение об ошибке:

Error: callbackdata was not called 
Stack trace: 
[email protected]://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js:2:1821 
b.converters["script json"]@http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js:4:16101 
[email protected]://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js:4:7333 
[email protected]://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js:4:10747 
.send/[email protected]://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js:4:15393 
[email protected]://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js:3:6392 
n.event.add/[email protected]://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js:3:3202 
CORS:25:7 
SyntaxError: missing ; before statement 

и ответ в MOZILLA daveloper-> Сеть

{"datapoints": [{"record_timestamp": "10-09-2016 05:30","data": {"temperature": {"id": "3","param_name": "temperature","value": "28.6","unit": "celsius"}}}]} 

JSON данные не wrappig с jsonpcallback. Пожалуйста, помогите мне найти решение.

Если я пытаюсь сделать Ajax вызов «JSON», как DATATYPE вместо «JSONP», сервер отвечает

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.example.com/fetchdata?param=1.(Reason: CORS header 'Access-Control-Allow-Origin' missing) 

ответ

0

Это сервер вы запрашиваете от необходимо установить CORS заголовки вверх , поэтому любой ваш example.com должен иметь свой сервер, настроенный для обслуживания заголовка Access-Control-Allow-Origin "*". Ввод его в ваш запрос AJAX не будет иметь эффекта.

0

Сервер, на который вы запрашиваете данные, возвращает JSON, а не JSONP. Сервер должен поддерживать JSONP, который требует, чтобы он возвращал код JavaScript, а не чистый JSON.

Например:

JSON является:

"{\"message\":\"hello world\"}" 

JSONP является:

callback({message:"hello world"}) 

сервер возвращает сценарий JSONP при условии, что 'обратный вызов' URL аргумент (JQuery для вас).

Если этот конкретный сервер не поддерживает это, ваш обратный вызов не будет вызываться.

Хотя не вопрос jQuery, this Q&A охватывает тот же предмет.

+0

Спасибо за ответ. Я понимаю разницу JSON и JSONP, но если данные (json) поступают из URL-адреса третьей стороны, то как я могу перейти на JSONP и как сервер поддерживает JSONP. Пожалуйста помоги. Я ничего не понимаю в Google. – rahul

+0

Сторонний сервер должен его поддерживать. Он признает ваш звонок, если он это сделает. Поскольку это не так, и вы получаете эту ошибку, это означает, что сторонняя сторона не поддерживает JSONP – trincot

+0

ok. мы делаем вид, что сервер не поддерживает JSONP. так что альтернатива возможна в этом сценарии. не могли бы вы дать мне решение. – rahul

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