Uncaught SyntaxError: Неожиданный токен

Проблема:

Uncaught SyntaxError: Неожиданный токен <

Что я пробовал

Запрос: Jsonp Ответ: возвращен ответ XML 200. Перекрестный домен Укажите, почему используется тип данных: jsonp

Код сценария:

$.ajax({
 url: "some url",
 headers: {
 'Content-Type': 'application/x-www-form-urlencoded'
 },
 type: "POST", /* or type:"GET" or type:"PUT" */
 data:myusername,
 crossDomain: true, 
 dataType: 'jsonp',
 data: {
 'name':myusername
 },
 success: function (result) {
 console.log(result);
 },
 error: function () {
 console.log("error");
 }
 //});
});

Здесь ответ AJAX - это XML. Но может кто-то сказать, как я могу решить неожиданную проблему с токеном. Ответ - это XML.

Решение, которое я нашел, является сторонним запросом

var urljson='cross-damin-url';


 var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + 
 encodeURIComponent('select * from xml where url="' + urljson + '"') + 
 '&format=xml&callback=?';


 $.getJSON(yql, function (data) {
 console.log(data.results[0]);
 });

Любое предложение приветствуется.

2 ответа

проблема заключается в строке "dataType:" jsonp ". Установив его таким образом, вызов ajax ожидает, что результатом будет jsonp (объект json, завернутый в качестве параметров в обратном вызове...), это полезно, если вы выполняете перекрестный вызов домена (из-за CORS). Вы должны установить "dataType:" xml ""

Редактировать, учитывая, что вы должны сделать вызов CORS, вам нужно изменить вывод api, по крайней мере, сделать что-то вроде

callbackName({value:'<your><xml>...</xml></your>'})

и синтаксический анализ xml из строки "callbackName" - это имя функции или метода, объявленных на странице, которые делают вызов ajax и который будет анализировать json из api... например, например:

function callbackName(result) {
 console.log($.parseXML(result.value)); 
}


JSON и XML представляют собой произвольно вложенные форматы обмена данными. Вы берете (правильно сформированную) строку и преобразуете ее в структуру данных, основанную на правилах формата. Их сходство останавливается.

Таким образом, вы не можете просто анализировать XML как JSON, у них есть разные правила для преобразования строки (например, возвращаемой HTTP-запросом) в структуру данных. Вот почему вы получаете сообщение об ошибке.

Анализ XML с помощью синтаксического анализатора XML (например, встроенного в каждый браузер) вместо анализатора JSON не приведет к ошибке.

Но ваша фактическая проблема заключается в том, что это междоменный ресурс и браузер (по уважительной причине) не позволят вам. Если вам нужен междоменный ресурс, и вы его не контролируете, и у него нет заголовка CORS, у вас есть несколько вариантов:

  1. Просите объект, который управляет ресурсом, чтобы добавить заголовок CORS
  2. Проденьте ресурс через свой домен.

Чтобы расширить вариант 2:

Ваша страница запрашивает ресурс с вашего веб-сервера, ваш веб-сервер делает HTTP-запрос ресурсу кросс-происхождения, а затем отправляет результат обратно в браузер.

О компании JSONP

JSONP был взломан, изобретенный до CORS, чтобы обойти модель безопасности браузера. Это было предназначено для использования людьми, которые понимали риски, знали, что они делают и почему. Это связано с потенциальным выполнением произвольного стороннего кода на вашей странице. Излишне говорить, что это плохо.

licensed under cc by-sa 3.0 with attribution.