xmlHttpRequest и межсайтовое ограничение - PullRequest
1 голос
/ 16 мая 2011

Как я могу обойти это ограничение? Я знаю, что могу использовать какой-то прокси, но не уверен, как этот прокси должен выглядеть?

Любые другие предложения?

Ответы [ 4 ]

2 голосов
/ 16 мая 2011

Вот довольно простой учебник: http://developer.yahoo.com/javascript/howto-proxy.html

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

1 голос
/ 16 мая 2011

JSONP как раз для этой цели

JSONP или "JSON with padding" является дополнением к базовому формату данных JSON, шаблону использования, который позволяет страницезапрашивать данные с сервера в другом домене.В качестве решения этой проблемы JSONP является альтернативой более позднему методу, который называется Cross-Origin Resource Sharing.

Вот очень простой пример реализации JSONP.

код на стороне сервера -

 public string GetFirstName()
        {
            string callback = Request.QueryString["callback"];
            string resultJson = "{\"FirstName\": \"archil\"}"; //should definitely be some more application specific data :)

            if (!string.IsNullOrEmpty(callback))
            {
                return string.Format("{0}({1})", callback, resultJson);
            }
            return resultJson;
        }

Этот метод сопоставлен с URL-адресом / GetFirstname на сервере.Это извлекает callback аргумент из строки запроса.И перенос сгенерированного resultJson как вызов функции javascript, где имя функции - это параметр, переданный с обратным вызовом.

на стороне клиента, с использованием jQuery - реализация так же проста, как

$(function () {

        $.ajax('http://serverUrl/GetFirstName', {

            dataType: 'JSONP',

            jsonpCallback: 'alert'

        });

    });

.имя alert в качестве обратного вызова для сервера.Сервер вернет alert({"FirstName": "archil"}).jQuery автоматически проверит этот ответ и выполнит его.В результате вы получите стандартный экран предупреждения в браузере.Основная идея заключается в том, что alert будет выполнено, если сервер вернет параметры.Вы можете передать более конкретное имя функции как jsonpCallback и действовать в соответствии с результатами запроса.

Я ЗНАЮ, что используемый здесь шаблон URL больше похож на веб-сервис в стиле RPC, чем на стиль REST, но в примере используется JSONP, а необ архитектуре REST

0 голосов
/ 16 мая 2011

Вот основные шаги для создания такого прокси.

  • Создайте страницу на стороне сервера (используя язык на стороне сервера, такой как PHP или ASP.NET, это не имеет значения) и назовите ее, например, «MyProxy»..aspx "
  • В коде на стороне сервера считайте данные, отправленные либо по URL-адресу, либо как данные POST, и отправьте эти данные в виде веб-запроса (в случае .NET, безусловно, в PHP и других языках есть аналог)внешний веб-сайт.
  • Анализирует результат, отправленный с внешнего веб-сайта, и отправляет его обратно клиенту.
  • На клиенте отправляет запрос AJAX на страницу прокси (например, MyProxy.aspx), передавая его.введите правильные данные и обработайте ответ.

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

0 голосов
/ 16 мая 2011

Вы можете использовать вызов $ .ajax ().

У него есть свойство crossdomain: оно обрабатывает междоменный запрос.

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

Для междоменного запроса с использованием jquery посмотрите на http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/

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