Почему я не могу использовать jQuery для запуска AJAX-запроса из обработчика события unload? - PullRequest
6 голосов
/ 16 февраля 2010

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

$(window).unload( function() {
   test();
});

function test()
{
   alert("Hi");
   $.ajax({
      type: "POST",
      url: baseUrl + 'Index/test',
      data: "user_id=" + "Nisanth" + "& chat_id=" + 2,
      success: function(msg){
         alert(msg);
      }
   });
   alert('Success');
}

Оба сообщения "Привет" и "Успех" предупреждают нормально, но предупреждение в обратном вызове AJAX не ... Операция, которую я намереваюсь вызвать с помощью запроса AJAX, также не выполняется (я разрабатываю приложение чата и намереваться внести запись в базу данных, когда пользователь закроет окно).

Ответы [ 2 ]

15 голосов
/ 16 февраля 2010

Поскольку ajax является асинхронным, страница выгружается до правильной отправки ответа, что фактически завершает соединение. Попробуйте установить async:false;, хотя это приведет к задержке выгрузки страницы до получения ответа, что не очень удобно для пользователя, если ваш сервер работает медленно.

$(window).unload( function () { 
    test(); 
}); 
function test() 
{ 
    alert("Hi"); 
    $.ajax({ 
    async: false,
    type: "POST", 
    url: baseUrl + 'Index/test', 
    data: "user_id=" + "Nisanth" + "& chat_id=" + 2, 
    success: function(msg){ 
            alert(msg); 
        } 
    }); 
    alert('Success'); 
} 
0 голосов
/ 16 февраля 2010

проблема в формате ваших данных. Он преобразуется в строку запроса, это должны быть пары ключ / значение, например: "user_id: value"

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