2014-10-24 8 views
0

У меня есть код, где мне нужно сделать запросы кросс-домена, чтобы получить текст/html в качестве ответа. Я использовал метод JSONP и ранее получал результаты (json) в другой программе. Когда я запустить программу, консоль выдает сообщение об ошибке, котороеОшибка обратного вызова Ajax (JSONP)

Uncaught SyntaxError: Unexpected token < 
?callback=jQuery17207555819984991103_1414157672145&_=1414157675836" 

Как вы можете видеть, что это добавило дополнительное значение параметра после параметра обратного вызова, который вызывает проблему. Когда я вижу ответ на вкладке Сеть, это довольно хорошо и точно, что я хотел. Я протестировал его на 4 кросс-доменных ссылках, и к ним добавлен дополнительный параметр. Ниже мой код:

$.ajax({ 
       type: 'get', 
       url: link, 
       dataType: 'jsonp', 
       success: function(dataWeGotViaJsonp){ 
        alert(dataWeGotViaJsonp) 
        var len = dataWeGotViaJsonp.length; 
       } 
      }); 

Ссылки Я перешедшие к нему:

http://stackoverflow.com/questions/20944962/data-grid-view-update-edit-and-delete-in-vb-net-windows-form-that-using-multipl 
http://www.espncricinfo.com/pakistan-v-australia-2014/engine/match/727927.html 
http://pucit.edu.pk/ 

Response это хорошо, но из-за этой ошибки, успех обратного вызова не вызывается. Любые решения?

+3

Звучит как ответ недействителен JSONP. JSONP - это не что иное, как динамический элемент сценария. То есть ответ должен быть действительным JavaScript. HTML недействителен JS. То, что вы пытаетесь сделать, просто невозможно. –

+2

вы не можете просто передать какие-либо URL-адреса, чтобы использовать 'jsonp', целевой ресурс должен поддерживать' jsonp', иначе это бесполезно. Ссылки, которые вы опубликовали выше, не поддерживают jsonp .... они возвратят содержимое html независимо от используемого 'dataType' ..., что приведет к указанной ошибке. –

+0

JSONP - это, по сути, скрипт, введенный на вашу страницу, содержащую функцию вызовите вашу функцию обратного вызова, аргумент которой является объектом. Вы должны следовать этому формату, иначе он не будет JSONP. – Joseph

ответ

2

«Непринятый синтаксис: непредвиденный токен <» является признаком того, что возвращенные данные, скорее всего, являются HTML-разметкой, а не правильной JSONP. Чтобы вернуть HTML из веб-службы JSONP, вам нужно что-то на сервере, который обертывает HTML в правильном синтаксисе вызова процедуры. Например,

jQuery17207555819984991103_1414157672145 ("<div>... your HTML here ...</div>") 

Поскольку HTML вероятно, будет иметь кавычки в нем где-то, что вам нужно будет бежать, URL кодирования, UUEncode или иным образом преобразовать текст HTML, чтобы быть подходящей строки Javascript, а затем преобразовать его обратно в клиенте.

Что касается «_ = 1414157675836», это добавляется, чтобы гарантировать, что ответ не кэшируется. Если веб-служба вашего сервера не отклоняет запрос, поскольку параметр «_» не распознается, это красная селедка. Проблема заключается в плохом синтаксисе JSONP, исходящем от хоста.

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