AJAX-вызов PHP-скрипта не работает в IE - PullRequest
2 голосов
/ 09 марта 2012

Что сработало:

Мой код теперь работает во всех браузерах и выглядит так:

window.onbeforeunload = function(){
   $.ajaxSetup({
   async: false
});


 $.post('./archive_onBeforeUnload.php?', {contact_id: contact_id}, function(){
 }).error(function(xhr, textStatus, error){
    console.log(xhr.statusText);
    console.log(textStatus);
    console.log(error);
    }); 
 }

Установка async на false в $.post() не показалась мне достаточной для его работы. Мне пришлось установить этот параметр в $.ajaxSetup, чтобы он работал во всех браузерах.


Мой проект - это своего рода программа чата, которую я создал с использованием HTML и PHP. Проблема, с которой я сталкиваюсь, заключается в том, что если человек закрывает окно с помощью кнопки X вверху, есть некоторый PHP, который мне нужно запустить, чтобы моя программа по-прежнему работала правильно. Так что я немного поискал и в итоге получил этот кусок кода:

window.onbeforeunload = function(){
    $.post('./archive_onBeforeUnload.php?', {contact_id: contact_id}, function(){
    }).error(function(xhr, textStatus, error){
        console.log(xhr.statusText);
        console.log(textStatus);
        console.log(error);
    });

}

Это вызывает archive_beforeUnload.php и запускает небольшое количество PHP, которое мне нужно. В FireFox, Safari и Chrome это работает просто отлично, но в IE у меня, похоже, есть проблема. Похоже, IE не хватает времени, чтобы полностью завершить вызов, что немного портит остальную часть моей программы. Способ, который у меня есть, это добавить оператор возврата, например, так:

window.onbeforeunload = function(){
    $.post('./archive_onBeforeUnload.php?', {async: 'true', cache: 'false', contact_id: contact_id}, function(){
    }).error(function(xhr, textStatus, error){
        console.log(xhr.statusText);
        console.log(textStatus);
        console.log(error);
    });
    return 'I need to fix the timer here.  Without this it doesn\'t work in IE';
}

Это, похоже, дает IE достаточно времени для фактического завершения вызова AJAX. Дело в том, что он создает окно подтверждения до того, как окно закрывается каждый раз, что будет раздражать пользователя. Есть ли способ, как я могу заставить это работать в IE без необходимости оператора return? Я немного осмотрел сеть, но пока не нашел того, что мне подходит.

Надеюсь, я был достаточно ясен в своем вопросе.

Edit:

Подумал, может, мне стоит добавить свой PHP-скрипт:

<?php
session_start();
require_once('client_init.php');

$sqlRequeue = 'UPDATE S2G_CHAT_TRAVELLER_QUEUE SET';
$sqlRequeue .= ' isOpen = 1';
$sqlRequeue .= ' WHERE contactID='.$contact_id;
$resRequeue = $conn_dd->query($sqlRequeue);
$resRequeue->close;

$_SESSION['s2g_chat_messages_shown'] = $default_messages_shown;
?>

1 Ответ

1 голос
/ 09 марта 2012

Мне кажется, проблема в том, что $.post() является асинхронным, поэтому функция возвращается до завершения.

Похоже, вы можете использовать функцию $.async(), чтобы выполнял тот же вызов синхронно .

РЕДАКТИРОВАТЬ: Или вы можете изменить настройки AJAX по умолчанию на синхронные .

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