Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   AJAX запрос... (https://javascript.ru/forum/misc/33684-ajax-zapros.html)

dmitry111 03.12.2012 14:04

AJAX запрос...
 
Как заставить браузер игнорировать действия пользователя при выполнении ajax?

Синхронные запросы почему-то не блокируют браузер, возможно потому что ajax запрос выполняется долго..

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

request = new window.XMLHttpRequest();
params = 'name=' + encodeURIComponent(key);
request.open('GET', "check.php?" + params, true);
request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");

request.onreadystatechange = function () {
    if (request.readyState === 4 && request.status === 200) {
////  .............
    }
};


С ajax никогда работать не приходилось до этого(((

Sanda 03.12.2012 14:16

Обычного флага не хватит?

var isRequestProcessed = false;
...

if (!isRequestProcessed) {
  isRequestProcessed = true;
  request = new window.XMLHttpRequest();
  //..
  request.onreadystatechange = function () {
    //..
    isRequestProcessed = false;
  }
}

dmitry111 03.12.2012 14:24

Sanda,

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

А разве по другому никак нельзя? (главное чтоб работало в ie8 -9 ниже не надо)

Sanda 03.12.2012 14:41

Цитата:

Сообщение от dmitry111 (Сообщение 219276)
Как заставить браузер игнорировать действия пользователя при выполнении ajax?

Синхронные запросы почему-то не блокируют браузер, возможно потому что ajax запрос выполняется долго..

С ajax никогда работать не приходилось до этого(((

Таки обещают, что request.open('GET', "check.php?" + params, true) задаёт асинхронный запрос (ссылка)
Если нужен синхронный, надо ставить false.

Ещё можно, например, вешать перекрывающий полупрозрачный div с надписью 'Loading...'

dmitry111 03.12.2012 15:17

Цитата:

Сообщение от Sanda
Таки обещают, что request.open('GET', "check.php?" + params, true) задаёт асинхронный запрос (ссылка)
Если нужен синхронный, надо ставить false.

синхронный почему-то не срабатывает (пробовал в firefox)

Цитата:

Сообщение от Sanda
Ещё можно, например, вешать перекрывающий полупрозрачный div с надписью 'Loading...'

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



Хотелось бы именно средствами js.

Dim@ 03.12.2012 15:20

dmitry111,
Цитата:

Сообщение от dmitry111
вот не знаю почему, но не люблю я использовать флаги. Мне кажется это хаком, возможно я не прав))

не прав:)

dmitry111 03.12.2012 15:34

Dim@,

просто я как думаю, что каждая переменная должна иметь значение, которое будет использоваться по назначению

в iQuery используются флаги?

У Фленагана нет ни строчки про флаги, я не нашел

Dim@ 03.12.2012 16:12

dmitry111,
флаг - переменная которая используется по значению
Цитата:

Сообщение от dmitry111
в iQuery используются флаги?

У Фленагана нет ни строчки про флаги, я не нашел

это настолько базовая вещь, но встречается не часто

dmitry111 03.12.2012 21:04

Dim@,

да? тогда буду решать с помощью флага!

Dim@ 03.12.2012 21:09

dmitry111,
Цитата:

Сообщение от dmitry111
да?

да :) :)


Часовой пояс GMT +3, время: 04:18.