Обновить страницу после AJAX — иногда сбой

#jquery #ajax #refresh

#jquery #ajax #обновить

Вопрос:

Я использую это для обновления / перезагрузки страницы после завершения ajax.

 $(".method").click( function() {
    if (confirm('Do  : '   $(this).attr('method')   ' ?')) {
        $.ajax({ url : 'go.php?method='   $(this).attr('method'),
        success: function(){
           setTimeout(function(){
           window.location = "?method=view";
            }, 100);
        }
   });
}
    return false;
});
  

Иногда это срабатывает, и страница обновляется, в других случаях часть ajax работает, но страница не обновляется.

go.php всегда вызывается и выполняется корректно.

Есть ли способ заставить ее работать постоянно?

Спасибо

Ответ №1:

Я полагаю, что во время процесса ajax возникает ошибка. Go.php будет вызываться всегда, но ответ браузера, очевидно, может отличаться. Вы можете указать функцию ОШИБКИ и выполнить то же самое, что и при успешном выполнении, но вместо этого, вероятно, захотите отобразить сообщение об ошибке.

 $(".method").click( function() {
    if (confirm('Do  : '   $(this).attr('method')   ' ?')) {
        $.ajax({ url : 'go.php?method='   $(this).attr('method'),
            success: function(){
                setTimeout(function(){
                    window.location = "?method=view";
                }, 100);
            },
            error: function(){
                setTimeout(function(){
                    window.location = "?method=view";
                }, 100);
            }
        });
    }
    return false;
});
  

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

 $(".method").click( function() {
    if (confirm('Do  : '   $(this).attr('method')   ' ?')) {
        $.ajax({ url : 'go.php?method='   $(this).attr('method'),
            complete: function(){
                setTimeout(function(){
                    window.location = "?method=view";
                }, 100);
            }
        });
    }
    return false;
});
  

Ответ №2:

попробуйте использовать этот код:

 $(".method").click( function() {
    if (confirm('Do  : '   $(this).attr('method')   ' ?')) {
        $.ajax({
        url : 'go.php?method='   $(this).attr('method'),
        success: function(){
        },
        complete: function() {
           setTimeout(function(){
           window.location.href = "?method=view";
           }, 100);

        }
   });
}
    return false;
});
  

ссылка: https://api.jquery.com/jQuery.ajax / ( complete раздел)

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

1. Я попробовал это, и у меня все еще была та же проблема. Я проверю еще раз и сообщу об этом.