MooTools AJAX Запрос на выгрузку - PullRequest
       29

MooTools AJAX Запрос на выгрузку

1 голос
/ 02 октября 2010

Я пытаюсь заблокировать строку в db-таблице, когда пользователь редактирует запись. Итак, в таблице lock есть поле, которое я установил на 1 при загрузке страницы с помощью php.

Тогда я пытался разблокировать запись (установить 0), когда страница выгружена. Это мой подход. Он отлично работает в IE, но не в Firefox, Chrome и т.д .... Window.onbeforeunload работает во всех браузерах, я это проверял. Они просто не делают запрос НО если я просто поставлю предупреждение после req.send (); это работает в некоторых браузерах, но не в Safari или Chrome. Поэтому я попытался поместить что-то еще после этого, просто чтобы после запроса было что-то еще, но оно не работает.

функциональный тест () { var req = новый запрос ({ url: 'inc / ajax / unlock_table.php? unlock_table = regswimmer & unlock_id =', }); req.send (); предупреждение ( 'бла'); // ТОЛЬКО С ЭТОМ РАБОТАЕТ!?!?!? }

window.onbeforeunload = test;

Я уже пробовал разные способы сделать запрос, но, похоже, ничего не работает. И сам запрос работает, только не в этом созвездии.

ЛЮБАЯ помощь будет признательна!

Спасибо

1 Ответ

4 голосов
/ 02 октября 2010

запрос по умолчанию асинхронный. это означает, что он разветвляется, а не заботится о полном, который может или не может прийти (успеть закончить). разместив там предупреждение, вы гарантируете, что для выполнения запроса достаточно времени.

В принципе, вам лучше попробовать одну из следующих вещей:

  1. добавить async: false к параметрам объекта запроса. это обеспечит выполнение запроса до отъезда.
  2. используйте изображение вместо пикселя отслеживания.
  3. перейти к method: "get", что немного быстрее, так как он не содержит дополнительных заголовков и информации о файлах cookie, может завершиться лучше (вернитесь к этому, если асинхронность задерживается слишком долго)

Вы можете сделать изображение так (также будет $ _GET)

new Element("img", {
    src: "inc/ajax/unlock_table.php?unlock_table=regswimmer&unlock_id=" + someid + "&seed=" + $random(0, 100000),
    styles: {
        display: "none"
    }
}).inject(document.body);

наконец, используйте window.addEvent("beforeunload", test); или вы можете испортить внутреннюю сборку мусора в mootools

...