2014-09-29 4 views
1

Если кто-то хочет отредактировать запись в таблице, я поставлю столбец «Заблокировано» в true. Если пользователь закрыл вкладку browser/tab, как я могу сделать это лучше всего, чтобы значение было записано «Locked» обратно на false?Разблокируйте таблицу, если браузер закрыт.

Возможно ли это с помощью ajax? Это можно увидеть, когда пользователь закрывает браузер/вкладку, а затем запускает событие ajax?

Или есть лучший и надежный метод? Я работаю с laravel 4 и MSSQL.

+0

Практически невозможно сделать это надежно. Кроме того, я думаю, вам нужно добавить дополнительные теги к вашему вопросу. – gpgekko

+1

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

ответ

0

Это очень опасно и очень ненадежно, поэтому, если вам нужны эти строки, разблокировать их, вы также можете поставить тайм-аут на них (столбец locked_at), индексировать столбец и искать заблокированные строки, чтобы разблокировать тайм-ауты. Но ...

Вы можете зацепить браузер разгрузку событий JavaScript, чтобы помочь вам в этом:

window.onbeforeunload = function(event) { 
    var s; 
    event = event || window.event; 
    if (requestsPending > 0) { 
     s = "Your most recent changes are still being saved. " + 
      "If you close the window now, they may not be saved."; 
     event.returnValue = s; 
     return s; 
    } 
} 
0

Tricky сделать надежно, несколько методов:

Использование onbeforeunload как предполагает Антонио, вас может сделать запрос ajax для освобождения блокировки?

Заблокировать запись за x минут при редактировании, а затем возобновить блокировку с помощью запроса ajax опроса непосредственно перед истечением срока блокировки.

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