2010-04-21 2 views
2
$.ajax({ 
     url: "/cgi-bin/stats.exe", 
     method: "post", 
     async: false, 
     data: { refresh: "a41" } 
    }); 

Использование ajax post синхронно - "async: false".Как изменить курсор во время синхронного браузера jQuery, блокирующего POST?

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

Возможно, установите курсор, когда он входит в эту функцию, затем измените его обратно в success or complete function?

Любые советы приветствуются.

Thank you.

+0

Удалите строку «async: false», а затем сделайте так, как предложил Ура. –

ответ

1

Я рекомендую использовать jQuery blockUI plug-in. Он изменит курсор, покажет любое сообщение или значок (http://ajaxload.info/), который вам нравится, пока пользователь ждет. Там много информации на сайте для того, как использовать его, но в своей простейшей форме:

$(document).ajaxStart($.blockUI).ajaxStop($.unblockUI); 

Это будет автоматически показывать курсор ожидания и предотвратить действия пользователей до тех пор, пока вызов не завершится Аякс.

+0

В любом случае это не поможет во время синхронного вызова ajax. – VoidKing

2

Не делайте запрос синхронным, потому что он полностью блокирует все остальное. Вместо этого вы можете использовать асинхронный запрос, но заставьте его выглядеть синхронно, «блокируя» пользовательский интерфейс. Для этого я использую jQuery.blockUI().

+0

Я тоже так делаю, довольно круто. – Cipi

+0

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

+0

Что вы подразумеваете под "Убедитесь, что страница не загружается?" Убедитесь, что браузер остается на текущей странице? Такого рода вещи находятся вне вашего контроля. Вы действительно не должны заставлять пользователя оставаться на определенной странице - и что, если они убьют их браузер? –

3

Я не проверял, но я думаю, что это будет сделано так:

$('html, body').css('cursor', 'wait'); 

$.ajax({ 
    url: "/cgi-bin/stats.exe", 
    method: "post", 
    async: false, 
    data: { refresh: "a41" }, 
    success: function() { 
    $('html, body').css('cursor', 'auto'); 
    // the rest of your processing here 
    }, 
    error: function() { 
    $('html, body').css('cursor', 'auto'); 
    } 
}); 

Per @ Патрикс предложение, изменили его на ошибки, а также.

+3

Возможно, необходимо также изменить его в обратном вызове 'error:'. – user113716

+1

Кажется, что любая функциональность, которую я поставил перед сообщением ajax, все еще происходит после сообщения ..? т. е. изменил курсор до и изменил его после сообщения. (та же проблема с экраном блока) –

+1

@Hooray. Вы можете избежать дублирования кода, изменив курсор в 'complete:' вместо 'success:' и в 'error:' –