La llamada AJAX al script PHP no funciona en IE

Qué funcionó:

Mi código funciona en todos los navegadores ahora y se ve así:

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);
    }); 
 }

Ubicación. async ser falso por dentro $.post() no parece ser suficiente para que funcione para mí. Tuve que poner esa configuración en $.ajaxSetup para que funcione en todos los navegadores.


Mi proyecto es una especie de programa de chat que creé usando HTML y PHP. El problema que tengo es que si la persona cierra la ventana usando el botón X en la parte superior, hay algo de PHP que necesito ejecutar para que mi programa siga funcionando correctamente. Así que busqué un poco y terminé con este fragmento de código en:

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);
    });

}

Esto llama a archive_beforeUnload.php y ejecuta la pequeña cantidad de PHP que necesito. En FireFox, Safari y Chrome, esto funciona bien, pero en IE parece que tengo un problema. No parece haber tiempo suficiente para que IE complete la llamada, lo que arruina un poco el resto de mi programa. Una forma que tengo de solucionar esto es agregar una declaración de devolución como esta:

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';
}

Esto parece darle a IE suficiente tiempo para completar la llamada AJAX. La cuestión es que crea una ventana de confirmación antes de que la ventana se cierre cada vez, lo que resultará molesto para el usuario. ¿Hay alguna manera de que pueda hacer que esto funcione en IE sin la necesidad de la declaración de devolución? He buscado bastante en la web, pero aún no he encontrado algo que funcione para mí.

Espero haber sido lo suficientemente claro en mi problema.

Edit:

Pensé que tal vez debería agregar mi script 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;
?>

preguntado el 09 de marzo de 12 a las 17:03

1 Respuestas

Creo que el problema es que $.post() es asincrónico, por lo que la función regresa antes de que se complete.

Parece que puedes usar el $.async() funcionar para hacer la misma llamada sincrónicamente.

EDITAR: O puedes cambie la configuración predeterminada de AJAX para que sea síncrona.

contestado el 23 de mayo de 17 a las 11:05

Guau... He configurado 'async' para que sea tanto verdadero como falso y no hizo nada. Incluso he usado $.ajaxSetup() antes en vano, incluso me encontré con la publicación exacta a la que se vinculó. Esta vez parece que he tenido suerte y está funcionando. Gracias. Editaré mi código en la parte superior para reflejar lo que funciona para mí. - Francis

@Francis - No creo async es una opción para $.post, solo para $.async. - Brendan largo

Ay... Eso no lo sabía. Todo este proyecto es la primera vez que trabajo con AJAX, por lo que ha sido una gran experiencia de aprendizaje. - Francis

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.