2010-10-02 3 views
1

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

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

тестовая функция() { вар REQ = новый запрос ({ URL: '? Вкл/Ajax/unlock_table.php unlock_table = regswimmer & unlock_id =', }); req.send(); предупреждение ('bla'); // ТОЛЬКО РАБОТАЕТ С ЭТОЙ!?!?!? }

window.onbeforeunload = test;

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

ЛЮБАЯ помощь будет оценена!

Спасибо

ответ

4

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

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

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

вы можете сделать изображение как так (также будет $ _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'

+0

спасибо, я добавил асинхронной ложь, и теперь он работает :-) – Roman

+0

ой и Я sed window.addEvent ('unload'). – Roman

+0

ahhhh, beforeunload не работал в опере, поэтому .... – Roman

Смежные вопросы