jquery post request: как указать активность браузера - PullRequest
0 голосов
/ 05 февраля 2012

Я использую $.post для отправки структуры json, созданной из пользовательского ввода:

$.post(
    url1,
    {'input': JSON.stringify(input)},
    function(data) {
        if (data['status']) window.location.href = url2;
        else window.location.href = url1;
    }
);

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

РЕДАКТИРОВАТЬ: Некоторые люди спрашивали, почему я просто не использую отправку стандартной формы.Ну, это потому, что данные, которые мне нужно отправить, довольно сложны для сборки, и я не знаю, можно ли что-то подобное сделать стандартными (не-ajax) способами.Вот как я строю данные:

var input = [];
$('.shopCat > p > input').each(function() {
      input.push({
        'id': $(this).closest('div').attr('id'),
        'name': $(this).val(),
        'parent': $(this).closest('div').attr('data-parent');
    });
});

Можно ли создавать и публиковать такие данные с помощью стандартной формы публикации?(Итак, сейчас я задаю два вопроса.)

Ответы [ 4 ]

2 голосов
/ 05 февраля 2012

В jQuery или javascript нет упакованного средства для этого. Вы можете себе представить, что существует множество сценариев, когда люди предпочитают отображать значок ожидания. Просто покажите свой контент ожидания перед публикацией, а затем в обратном вызове скройте его.

$('#waiting').show(); //show waiting icon or whatever
$.post(
    url1,
    {'input': JSON.stringify(input)},
    function(data) {
        $('#waiting').hide();  //hide it on callback
        if (data['status']) window.location.href = url2;
        else window.location.href = url1;
    }
);

Если у вас есть конкретное представление о том, что вы хотите, дайте нам знать. Как вы хотите, чтобы модальное окно или определенный div был скрыт. Индикатор выполнения, один из этих кружков, подождите, пожалуйста, текст и т. Д., И т. Д.

1 голос
/ 05 февраля 2012

Ну, вы не можете заставить браузер казаться занятым. Но вы можете установить курсор на занят

$(document).css('cursor','wait');
$.post(
url1,
{'input': JSON.stringify(input)},
function(data) {
    if (data['status']) window.location.href = url2;
    else window.location.href = url1;

}
);

Хотя может быть лучше не использовать ajax , просто используйте обычную отправку формы, поскольку вы все равно решили перенаправить впоследствии.

1 голос
/ 05 февраля 2012

Если перенаправление происходит всегда, почему вы используете AJAX-запрос вместо отправки формы на сервер и перенаправления на стороне сервера? Вы также получите от этого лучшую производительность, поскольку сохраняете запрос.

1 голос
/ 05 февраля 2012

Вы можете использовать плагин jquery blockui , чтобы указать, что выполняется некоторая асинхронная операция ... просто вызовите blockUI перед отправкой сообщения и unblockUI в вашем обратном вызове.он не блокирует пользовательский интерфейс ... посмотрите примеров здесь и проверьте опцию "Growl" или что-то, что подходит для вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...