Запрос Ajax с JQuery на странице разгрузки

Я пытаюсь сделать это:

$(window).unload( function () { 

$.ajax({
    type: "POST",
    url: "http://localhost:8888/test.php?",
    data: "test",
    success: function(msg){
         alert( "Data Saved: " + msg );
    }
}); 
alert (c);
});

Однако предупреждение об успешном завершении никогда не отображается, и этот запрос, похоже, даже не поражает сервер. Что я делаю неправильно?

Ответ 1

Я считаю, что вам нужно сделать запрос синхронным (по умолчанию он асинхронным) с помощью параметра async : false.

Ответ 2

Попробуйте вызвать его с помощью async = false;

jQuery.ajax({url:"http://localhost:8888/test.php?", async:false})

Я просто попробовал.

Ответ 3

Лучшее решение - использовать navigator.sendBeacon. Это совершенно новая функциональность, которая начинает внедряться в новые версии браузеров. Функция доступна в браузерах, новее, чем Chrome 39 и Firefox 31. Она не поддерживается Internet Explorer и Safari на момент написания. Чтобы убедиться, что ваш запрос отправляется в браузерах, которые еще не поддерживают новую функциональность, вы можете использовать это решение:

var navigator.sendBeacon = navigator.sendBeacon || function (url, data) {
  var client = new XMLHttpRequest();
  client.open("POST", url, false); // third parameter indicates sync xhr
  client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
  client.send(data);
};

Эта функция не позволяет вам регистрировать обратный вызов onsuccess.

Ответ 4

В спецификации HTML 5 указано, что alert(), prompt() и т.д. не будут доступны во время события window.unload(). Подробнее см. window.unload(). Вы можете проверить результат, используя console.log('success'); вместо alert().

Ответ 5

Ваша функция и вызов Ajax выглядят прекрасно, поэтому я предполагаю, что ваше окно браузера закрыто до того, как вызов ajax успеет перейти на сервер и обратно. Вызов ajax может вернуть что-то, когда окно закрывается, попробуйте добавить функцию ошибки к вашему вызову ajax, чтобы узнать, есть ли этот случай:

error: function (xhr, textStatus) {
    alert('Server error: '+ textStatus);
}

Ответ 6

Может быть, у вас будет больше успеха с помощью события onbeforeunload?

   $(window).bind('beforeunload', ...