jQuery.ajax () получает parseError при получении JSON из источника x-домена - PullRequest
0 голосов
/ 09 августа 2011

Это мой Javascript

$.ajax({
    "url": url,
    "dataType" : "json",
    "async" : false,
    "success" : function(e) {
        retval = e;
    },
    "complete" : function(jqXHR, textStatus) {
        debugger;
    },
    "error" : function(jqXHR, textStatus, errorThrown) {
        debugger;
    },
    "xhrFields": {
       withCredentials: true
    }
})

url, например, http://api.justin.tv/api/channel/show/{0}.json ({0} заменяется именем канала)

Скрипт прерывается при ошибке с textStatus "parseserror". Также я замечаю, что jqXHR не имеет responseText, но вместо этого все json-файлы, которые я пытался загрузить, появились на вкладке ресурсов с Uncaught SyntaxError: Unexpected token :. Также я получаю предупреждение Resource interpreted as Script but transferred with MIME type application/json. за каждый запрос ajax. Кроме того, запросы x-domain не кажутся асинхронными, поскольку код ниже вызова ajax выполняется до выполнения обратного вызова error.

Итак, чтобы уточнить, моя цель состоит в том, чтобы обратный вызов при успешном вызове ajax выполнялся при каждом запросе с проанализированным объектом JSON как e. Этот код уже работает для локальных вызовов json ajax, но не для вызовов x-домена. Json, возвращаемый вызовами x-domain, действителен и не должен приводить к ошибкам синтаксического анализа.

Если у кого-нибудь есть идеи, поделитесь

Спасибо

Ответы [ 2 ]

1 голос
/ 09 августа 2011

попробуйте добавить? Jsonp = в конец вашего URL.Обычно вам нужно указать обратный вызов, чтобы получить правильный JSONP

> http://api.justin.tv/api/channel/show/{0}.json?jsonp=

См. Разницу между этими двумя URL

http://api.justin.tv/api/channel/show/342.json?jsonp=

и

http://api.justin.tv/api/channel/show/342.json

? Jsonp = добавляет символы округления к данным, чтобы вы могли использовать их в междоменной области.

0 голосов
/ 09 августа 2011

Вам нужно будет обратиться за поддержкой jsonp в $.ajax() - http://api.jquery.com/jQuery.ajax/

Вы нарушаете политику с тем же источником , где вы можете 'Делать XmlHttpRequest для доменов за пределами вашего.JSONP позволяет вам обойти это.

Я не знаю, поддерживает ли justin.tv JSONP;по сути, он должен обернуть ответ, который он посылает вам, в метод, предоставленный вызовом JSONP.

...