заменить документ результатами AJAX

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

У меня есть форма, которая отправляет скрипт, выполнение которого может занять много времени (~ 30-60 секунд, плюс-минус). Я хотел бы иметь счетчик, который показывает, что результаты обрабатываются, пока пользователь ожидает. Обычно я бы вставил счетчик в скрипт обработки и покончил с этим, но у меня нет доступа к скрипту. Есть ли способ использовать js / jQuery для отправки AJAX-запроса, а затем загрузить целевую страницу, когда ее обработка будет завершена? Что-то вроде этого — это то, что я хочу:

 <script type="text/javascript">
    $(function() {
        $("#myForm").submit(function () {
            var data = $(this).serialize();
            $.post("url/to/script.php", data, function (results) {
                // replace this entire document, url included, with the results
            });
            $("#spinner").hide().ajaxStart(function () {
                $(this).show();
            }).ajaxStop(function () {
                $(this).hide();
            });
        });
    });
</script>
  

Я также открыт для альтернативных идей.

[править]

Чтобы (надеюсь) прояснить: я хочу, чтобы результаты загружались в фоновом режиме, и переходить к ним только после их завершения. Поведение (за исключением счетчика) не должно отличаться для конечного пользователя от отправки формы без использования javascript.

[правка 2]

Мне удалось убедить владельца целевого скрипта установить счетчик на место, так что вопрос теперь академический.

Комментарии:

1. что вы имеете в виду под «включенным URL»? что возвращает ajax? Для замены всего документа выполните $("body").html(results);

2. Я попробовал это и получил пустой экран. Я подозреваю, что это связано с тем, что находится в <head> результатов. Я попытался разобрать результаты в head и body, а затем присвоить их через jQuery с тем же конечным результатом (пустой экран).

3. AJAX возвращается в переменной «results» как часть функции успеха ($.post() принимает анонимную функцию в качестве ярлыка для добавления функции успеха в AJAX).

Ответ №1:

Если я вас правильно понял…вы не можете заменить URL на javascript. Не могли бы вы просто открыть.Расположение.href = «your-new-url.com «об успехе ajax?

Если вы не можете этого сделать, вы могли бы опубликовать свои результирующие данные из запроса ajax на новый URL и просто заставить эту страницу выдать ваш результат.

Комментарии:

1. Окно настройки. Расположение. href = url приводит к тому, что браузер загружает целевой URL-адрес как совершенно новый запрос, который противоречит цели. Добавление возвращенного HTML-кода в строку URL приводит к разрыву относительных ссылок (как и вставка результатов на страницу поиска).

2. @asgallant Я в курсе, что это делает. Наверное, я не совсем правильно вас понимаю. Если бы вы могли предоставить больше информации о том, что вы пытаетесь, возможно, я мог бы помочь вам дальше?