JQuery и Ajax с JSON - не удается в IE - PullRequest
1 голос
/ 13 ноября 2011

Я использую jQuery (1.7.0) для вызова json / ajax в Spotify.Следующий код прекрасно работает в Chrome и Firefox, но вызывает ошибку (Ошибка: доступ запрещен.) В IE.

 $.ajax({
     url: 'http://ws.spotify.com/lookup/1/.json',    
     type: 'GET',    
     dataType: 'json',    
     cache: true,    
     data: {    
       uri: "someartist",    
       extras: "album"    
     },    
     success: successfn,    
     error:function(xhr, status, errorThrown) {    
       alert("networking error: "+errorThrown+'\n'+status+'\n'+xhr.statusText);    
     }
 });

Функция успеха вызывается в Chrome и FF, но функция ошибки вызываетсяв IE с вышеприведенным сообщением.Я установил для cors значение true: jQuery.support.cors = true;.

Он работает на Chrome и FF как локально, так и на моем сервере, работает в IE локально, но не на сервере.Изменение cache: false вызывает проблемы в конце spotify - не выводит дополнительные параметры, поэтому я получаю ошибку «неверный запрос».

Благодарен за любые указатели.

Спасибо

Abo

Ответы [ 5 ]

4 голосов
/ 13 ноября 2011

Вы полагаетесь на URL-адрес spotify, чтобы указать в заголовке значение Access-Control-Allow-Origin:*, чтобы разрешить междоменные запросы со всех доменов. Однако Internet Explorer не поддерживает это, поэтому он запрещает доступ.

объяснение доступа-разрешения-происхождения объяснено. (TLDR: серверы могут разрешать междоменный ajax в своих заголовках)

Если вам это нужно для работы в IE, вы можете использовать JSONP API-интерфейс spotify, если он есть, или сделать запрос AJAX во флэш-памяти, который работает во всех браузерах и передает данные ответа на запросы в ваш javascript.

2 голосов
/ 10 июня 2012

Приведенный выше ответ об использовании jsonp правильный;Я хочу добавить:

Не установить

jquery.support.cors = true;

Я не уверен, почему так много вопросов начинаются с заявления, что они сделали этот шаг.Это свойство предназначено для чтения, чтобы узнать, поддерживает ли браузер CORS.Вы должны переопределить его, только если вы знаете по-другому, и, по моему опыту, это верно для всех основных браузеров.Установка его в true не позволяет браузеру использовать CORS, он просто опровергает информацию о сбое CORS.

http://api.jquery.com/jQuery.support/

0 голосов
/ 13 ноября 2011

Я удивлен, что это работает на Chrome или Firefox.Вы не должны иметь возможность выполнять междоменные запросы JSON.

Если Spotify API поддерживает это, вы должны использовать JSONP для доступа к ресурсам из других доменов.

Также см .: Нет ответа от вызова jQuery ajax

0 голосов
/ 13 ноября 2011

Я не вижу, что это работает в FF.Вы не можете совершать междоменные вызовы Ajax.Поэтому я не уверен, что происходит, когда вы говорите, что это работает в FF.Но я просто попробовал следующее в FF и получил ошибку.Так что все, что вы можете сделать, это позвонить на стороне сервера и затем включить результаты на своей странице.

http://jsfiddle.net/2XWGn/

0 голосов
/ 13 ноября 2011

Можете ли вы привести пример возвращаемых данных?

в / догадке /, это либо связано с именем файла ".json", либо в возвращенном JSON есть что-то странное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...