JQuery внешний вызов Ajax не работает в IE - PullRequest
1 голос
/ 23 мая 2011

У меня есть сценарий ajax, который отправляет некоторые данные на внешний URL-адрес.Внешний URL-адрес размещен на том же сервере, однако домен отличается от источника вызова ajax.

Это отлично работает в Firefox и Chrome.Однако в IE вызов ajax не проходит, и функция Return False также не работает (после сбоя вызова ajax).

Ниже приведен мой код:

 $.get('http://myexternaldomian.com/feedback/save.php', {
            answer: $('#answer').val(),
            page_url: pathname
        });

        // Keeps the user on the page
        return false;

Когда япопробуйте удалить http: // из URL-адреса ajax, возвращаемое значение false работает.

Любая помощь по этому вопросу будет принята с благодарностью.Спасибо

Ответы [ 7 ]

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

Из документации jQuery

Из-за ограничений безопасности браузера большинство запросов "Ajax" подчиняются той же политике происхождения;запрос не может успешно получить данные из другого домена, субдомена или протокола.

и Одинаковая политика происхождения в вики

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

(это копия из моего другого аналогичного ответа). Вы можете попробовать включить флаг "jQuery.support.cors = true" и посмотреть, как это происходит. Я использую jQuery v1.7.2.

Мне пришлось загрузить веб-страницу с локального диска "file: /// C: /test/htmlpage.html", вызвать "http://localhost/getxml.php" url" и сделать это в браузерах IE8 + и Firefox12 +, использовать библиотеку jQuery v1.7.2 для свести к минимуму стандартный код. После прочтения десятков статей, наконец, понял это. Вот мое резюме.

  • серверный скрипт (.php, .jsp, ...) должен возвращать HTTP-заголовок ответа Access-Control-Allow-Origin: *
  • перед использованием jQuery ajax установите этот флаг в javascript: jQuery.support.cors = true;
  • вы можете установить флаг один или каждый раз перед использованием jQuery ajax-функции
  • теперь я могу читать .xml документ в IE и Firefox. Другие браузеры я не тестировал.
  • Ответный документ может быть простым / текстовым, XML, JSON или любым другим

Вот пример вызова jQuery ajax с некоторыми sysouts отладки.

jQuery.support.cors = true;
$.ajax({
    url: "http://localhost/getxml.php",
    data: { "id":"doc1", "rows":"100" },
    type: "GET",
    timeout: 30000,
    dataType: "text", // "xml", "json"
    success: function(data) {
        // show text reply as-is (debug)
        alert(data);

        // show xml field values (debug)
        //alert( $(data).find("title").text() );

        // loop JSON array (debug)
        //var str="";
        //$.each(data.items, function(i,item) {
        //  str += item.title + "\n";
        //});
        //alert(str);
    },
    error: function(jqXHR, textStatus, ex) {
        alert(textStatus + "," + ex + "," + jqXHR.responseText);
    }
});
1 голос
/ 23 мая 2011

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

Основное исключение из этого правила - если вы делаете вызов ajax, используя jsonp (json с padding). Вы можете сделать это с помощью jQuery, вот как . Посмотрите под dataType вариант.

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

Пара вещей:

  • Ответы / беседа на этот вопрос вышли из контекста. На самом деле из вопроса больше подразумевалось, как совершать ajax-вызовы в IE. [По крайней мере, измените название вопроса, иначе вопрос очень локализован]

Несколько решений этой междоменной проблемы:

  1. CORS [совместимо после IE7]
  2. JSONP [здесь на самом деле браузер воспринимает ввод, думая, что это скрипт]
  3. кодировка на стороне сервера
0 голосов
/ 23 мая 2011

Вы должны добавить

callback=?

на ваш URL и обработайте это на стороне сервера.

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

надеюсь, это поможет!

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

Я не думаю, что он должен работать на Chrome или Firefox, если только вы не тестируете на localhost или что-то в этом роде, это будет противоречить политике междоменных доменов.

Вам нужно прокси-сервер внутри того же домена,используйте php для подключения к нужному месту назначения и вызовите URL из того же домена.

save_cross_domain.php -> подключитесь через сервер к нужному URL

, затем ajax вызовет save_cross_domain.php

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