Проблема с МЕТОДОМ в прототипе / Ajax.Request - PullRequest
4 голосов
/ 24 сентября 2010

Я пытаюсь вызвать Yahoo Api через Ajax, чтобы узнать текущую погоду:

var query = "select * from weather.forecast where location in ('UKXX0085','UKXX0061','CAXX0518','CHXX0049') and u='c'";
var url = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent(query) +'&rnd=1344223&format=json&callback=jsonp1285353223470';

new Ajax.Request(url, {
   method: 'get',
   onComplete: function(transport) {
      alert(transport.Status); // say 'null'
      alert(transport.responseText); // say ''
   }
});

Я заметил, что вместо GET firebug говорит ОПЦИИ . Что это такое и как я могу использовать прототип силы для использования GET?

Вот функциональность , которую я пытаюсь воссоздать.

А вот полный URL, к которому я пытаюсь получить доступ:

<a href="http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20location%20in%20(%27UKXX0085%27%2C%27UKXX0061%27%2C%27CAXX0518%27%2C%27CHXX0049%27)%20and%20u%3D%27c%27&rnd=1344223&format=json&callback=jsonp1285353223470">http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20location%20in%20(%27UKXX0085%27%2C%27UKXX0061%27%2C%27CAXX0518%27%2C%27CHXX0049%27)%20and%20u%3D%27c%27&rnd=1344223&format=json&callback=jsonp1285353223470</a>

1 Ответ

3 голосов
/ 12 декабря 2010

После нескольких часов попыток отладить ту же проблему, я пришел к следующему выводу.

Я полагаю, что это происходит из-за контрмер XSS в новых браузерах.

Вы можете найти очень подробную информацию об этих новых контрмерах здесь:

https://developer.mozilla.org/en/http_access_control

По сути, сайт может указывать, насколько «осторожен» браузер при разрешении сценариев из других доменов. Если ваш сайт или сайт, с которого вы загружаете внешний код JavaScript, содержат один из этих «советов по работе с браузерами», более новые браузеры будут реагировать, применяя более строгую политику XSS.

По какой-то причине Ajax.Request Prototype в Firefox, похоже, реагирует, пытаясь выполнить запрос OPTIONS, а не GET или POST, поэтому, возможно, Prototype не был обновлен для корректной обработки этих новых условий безопасности.

По крайней мере, таков был вывод в моем случае. Может быть, эта подсказка может помочь с вашим делом ...

...