выполнение запросов json / jsonp xhr к файлу: протокол - PullRequest
3 голосов
/ 04 января 2011

Я пишу приложение javascript, которое будет размещаться по протоколу file: (т.е. приложение представляет собой просто папку html, css и javascript, которая находится где-то на моем жестком диске).Когда я пытаюсь выполнить нормальные запросы XHR, они терпят неудачу из-за одной и той же политики происхождения.

Поэтому мой вопрос заключается в следующем: как лучше всего запрашивать файлы json / jsonp с помощью приложения, как описано выше?* Примечание: до сих пор у меня все мои файлы jsonp с использованием жестко закодированных функций обратного вызова, но я хотел бы иметь возможность использовать функции динамического обратного вызова для этих запросов ... есть ли способ сделать это?

Ответы [ 3 ]

7 голосов
/ 04 января 2011

Это довольно сложная работа, но вы получите ваши динамические обратные вызовы.В основном это рассчитывает на то, что file: переводы будут довольно быстрыми.Он устанавливает очередь запросов и отправляет их по одному за раз.Это был единственный способ выяснить, чтобы убедиться, что правильный ответ и обратный вызов могут быть связаны (в гарантированном порядке).Надеюсь, кто-то может придумать лучший способ, но без возможности динамически генерировать ответы, это лучшее, что я могу сделать.проверить

window.onload = function() {
  JSONP.request('data.js', function(json, file) { alert("1 " + json.message); });
  JSONP.request('data.js', function(json, file) { alert("2 " + json.message); });
}

Data.js

JSONP.response({
  message: 'hello'
});
1 голос
/ 17 июня 2011

Chrome имеет очень жесткие ограничения на выполнение вызовов ajax из файла: // url, из соображений безопасности.Они знают, что это ломает приложения, которые работают локально, и было много споров об альтернативах, но так оно и есть сегодня.

Ajax отлично работает по URL-адресам файлов в Firefox, просто имейте в видукод возврата не является кодом статуса http;т. е. 0 - это успех, а не 200-299 + 304.

IE обрабатывает эти проблемы безопасности по-разному, как в Chrome, так и в Firefox, и я ожидаю, что другие браузеры будут использовать свои собственные подходы.Граница между веб-приложениями и настольными приложениями - очень проблемная территория.

0 голосов
/ 04 января 2011

"Когда я пытаюсь выполнить нормальные запросы XHR, они терпят неудачу из-за одной и той же политики происхождения afaict"

... нет, я думаю, что они терпят неудачу, потому что запрос XHR использует HTTP или HTTP для запроса ресурса в сетисервер.(см. http://en.wikipedia.org/wiki/XMLHttpRequest).

Если вы не обращаетесь к веб-серверу, вы не можете (успешно) делать запросы XHR.

...