2016-08-04 1 views
-1

Я звоню в AJAX-запрос кросс-домена, используя JSONP. Теперь я могу заставить его работать с помощью CORS. Но, я хочу знать, почему это не происходит с JSONP. Я смотрел на другие темы с подобной проблемой, но не мог понять, почему он не работает в моем случае.Ошибка JSONP Parse с действительным выводом JSON

Вот код:

$.ajax({ 
     type: "GET", 
     url: http://XXXX:8000/sap/bc/test_rest/jsonp_test?mode=S&ticket=123, 
     dataType: "jsonp", 
     jsonp: false, 
     jsonpCallback: "myJsonMethod", 
     success: function (data) { 
      alert(data); 
     }, 
     error: function (httpReq, status, exception) { 
      alert(status + " " + exception); 
     } 
    }); 

Теперь это вызывает мой сервер, данные заполняется, а затем я получаю предупреждение «Ошибки синтаксического анализа myJSONMethod не называется» на обратный вызов URL http://xxxx:8000/sap/bc/test_rest/jsonp_test?mode=S&ticket=123&_=1470322282936

Кроме того, в консоли я получаю сообщение об ошибке, как неперехваченных SyntaxError: Неожиданный маркер: структура ответа:

{"ROOT":{"CONTRACT":"40002356","ITEM":"000010","KUNNR":"0000004676","NAME":"REALTY EXECUTIVES","NET_PRICE":19.95,"GROSS_PRICE":19.95,"MATNR":"144","SQFEET":""}} 

Когда я запускаю этот вывод JSON на jsonlint, он говорит, что это действительный JSON. Я не знаю, где JSON запутался.

+0

Можете ли вы поделиться 'myJsonMethod' кодом? – Venky

+1

вам нужно обернуть свой json в myJsonMethod (... yourJSONhere ...). Это означает, что JSONP – Maxx

+0

Действительный JSON - это не то же самое, что и действительный JSONP. В этом проблема - вы пытаетесь использовать API, который возвращает JSON, как если бы это был JSONP API, и это просто не сработает. – Pointy

ответ

1

Ваши данные должны быть такими, чтобы быть действительным для JSONP:

myJsonMethod({"ROOT":{"CONTRACT":"40002356","ITEM":"000010","KUNNR":"0000004676","NAME":"REALTY EXECUTIVES","NET_PRICE":19.95,"GROSS_PRICE":19.95,"MATNR":"144","SQFEET":""}}); 
+0

Большое спасибо. Мне пришлось вручную обернуть его на стороне сервера, чтобы он выглядел так, и он работал отлично. –

1

responsetext должен быть действительным JS код и он будет работать сразу же, когда ответ over.So если вы пишете код

{"ROOT":{"CONTRACT":"40002356","ITEM":"000010","KUNNR":"0000004676","NAME":"REALTY EXECUTIVES","NET_PRICE":19.95,"GROSS_PRICE":19.95,"MATNR":"144","SQFEET":""}}

в <script> теге, консоль будет сгенерирована ERR, как этот

+0

Вы правы. Теперь я понял. Благодаря!! –

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