XDomainRequest для междоменного ajax выдает непонятную ошибку - emptry error - PullRequest
1 голос
/ 22 февраля 2012

У меня следующий вызов ajax, который должен вызывать страницу в другом домене:

if ($.browser.msie && window.XDomainRequest) {

            // Use Microsoft XDR
            var xdr = new XDomainRequest();
            xdr.open("post", "https://different-domain.aspx");
            xdr.onload = function() {
                alert(xdr.responseText);// XDomainRequest doesn't provide responseXml, so if you need it:                       

            };
            xdr.onerror = function() {
                alert("Error " + xdr.responseText);
            };
            xdr.onprogress = function() {
                alert('errored out');
            };

            var params = "fileName="+ file+"&param02="+ param02+"&param03="+ param03+"&param05="+ param05+"&param08="+ param08+"&param11="+ param11;
            alert(params);
            xdr.send(params);
        } 

Секция кода в методе onerror выполняется, но xdr.responseText - пустое значение. Кто-нибудь может указать мне, что я, возможно, делаю неправильно?

Я пытаюсь вызвать страницу ajax в другом домене - одним из способов было бы изменить настройку безопасности Интернета на «Разрешить для разных доменов», но я не хочу говорить своим пользователям, чтобы это делалось.

1 Ответ

1 голос
/ 22 февраля 2012

Я полагаю, что вы сталкиваетесь с политикой Same-Origin-Policy, в которой вам не разрешено создавать запросы AJAX в другом домене, чем текущий.Есть способы обойти это;Вы можете создать серверный сценарий для использования в качестве прокси-сервера или, если возможно, использовать JSONP (для правильной настройки удаленного сервера требуется JSONP.

Поскольку вы пометили свой вопрос с помощью jQuery IЯ дам вам пример того, как сделать это в среде jQuery (что является одной из основных причин использования jQuery, это делает AJAX простым):

$.ajax({
    url      :  <url>,
    type     : 'post',
    dataType : 'jsonp',
    success  : function (serverResponse) {},
    error    : function (jqXHR, textStatus, errorThrown) {}
});

Для этого используется JSONPмеждоменный запрос.

dataType: 'jsonp'

Загружает в блок JSON с помощью JSONP. Добавляет дополнительный «? callback =?» кконец URL-адреса для указания обратного вызова. Отключает кэширование, добавляя параметр строки запроса "_ = [TIMESTAMP]" к URL-адресу, если для параметра кэширования не задано значение true. Документы для $.ajax():

Источник: http://api.jquery.com/jquery.ajax

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

...