jQuery не отправляет IE в браузерах

#jquery #ajax #internet-explorer #post #get

#jquery #ajax #internet-explorer #Публикация #получить

Вопрос:

У меня есть следующий фрагмент кода в проекте, над которым я работаю:

 if(!validate($(".emailbody input").val())){
    ...
}
else{
    $.get("https://get.request.com/something", {email:encodeURI($(".emailbody input").val())})
    .complete(function(){
        $(".emailbody").append($('<p class="emailsucess">Kiitos! Linkki rekisteröitymisen jatkamiseen on lähetetty sähköpostiisi: ' $(".emailbody input").val() '</p>'));
        $.post("http://post.request/confirm.php", {"confirm":$(".emailbody input").val()})
        $(".emailbody input").val("");
    });
}
  

Простой запрос get помещает данные в базу данных подключенной службы, а затем ответ post отправляет почту с локального хоста.

Моя проблема заключается в следующем:

В любом другом браузере, кроме IE (любой версии), это работает довольно успешно и без каких-либо проблем, однако в IE вызов GET даже не отображается в сетевом трафике, он игнорируется, не вызывается, но полный вызов все равно выполняется, как если бы он прошел через OK!

Это проблема со службой https, или есть что-то, что я пропустил?

ОБНОВЛЕНИЕ: Я обошел проблему, выполнив post-вызов локального файла, который отправляет запрос GET на внешний сервер, так что теперь это работает, но это глупый способ делать вещи. Любой, кто может пролить некоторый свет на это, был бы очень признателен.

Комментарии:

1. Попробуйте добавить переменную со случайным значением в конце или временную метку. IE имеет неприятную привычку кэшировать запросы.

2. похоже, это не помогает, даже при изменении отправляемого адреса / добавлении переменных метки времени, похоже, он все еще не пытается отправить.

3. https://get.request.com является ли тот же домен, на котором находится страница? Страница отправки также уже находится на https?

Ответ №1:

Похоже, проблема с кэшированием. Запросы GET могут кэшироваться, поэтому вы могли бы попробовать добавить случайный параметр querystring к URL, чтобы избежать этого. Или используйте $.ajax с cache: false :

 $.ajax({
    url: 'https://get.request.com/something',
    type: 'GET',
    data: { email: $(".emailbody input").val() } // <-- note that you don't need to encode here, jQuery will take care of this
    cache: false,
    success: function(result) {
        ...
    }
});
  

Также убедитесь, что вы соблюдаете ограничение политики того же источника. Лучший способ обеспечить это — использовать относительные URL-адреса. Поэтому вместо:

 'https://get.request.com/something'
  

используйте:

 '/something'
  

Комментарии:

1. невозможно использовать ту же политику происхождения, из-за того, что я пытаюсь получить ответ от службы https, когда я в http, поэтому относительные значения не работают. Я не думаю, что это проблема с кэшированием, потому что он не загружает запрос, даже когда вы делаете это в первый раз, а не только при повторных попытках, поэтому у него нет возможности кэшировать. Есть другие идеи?