Как решить проблему перенаправления страниц jquery?

0

При возникновении ошибки моя страница перенаправляется на другую страницу без отображения сообщения об ошибке.

Есть ли способ написать e.preventDefault(); внутри function() ошибки ajax function()? или каким-либо другим способом остановить переадресацию страницы на другую страницу при возникновении ошибки?

Я не могу объявить e.preventDefault(); глобально, так как при успешном выполнении я делаю рендеринг страницы на другой странице с контроллера.

Это мой код ajax:

$('#request').on("submit", function(e) {
    $(e.currentTarget).find("div.error").hide();
    var _data = $(e.currentTarget).serialize();
    var obj = $("#track_request").val();
    if(obj == ""){
        $("#track").text("Enter Request Number.");
        $("#track").fadeIn(1000);
        setTimeout(function() {
          $("#track").fadeOut(1000);
        }, 2000);
        e.preventDefault();
    }
    $.ajax({
          type: "POST" ,
          url: "/track",
          data: _data,
          success: function(data) {
          },
          error: function(xhr, textStatus, errorThrown, event) {
                if(obj != "" && xhr.status == 500){
                    $("#track").text("Enter Valid Request Number.");
                    $("#track").fadeIn(1000);
                    setTimeout(function() {
                       $("#track").fadeOut(1000);
                    }, 3000);
                }
          },
    });

});

Теги:

1 ответ

0

Вы можете установить e.preventDefault() как первую строку, а затем отправить форму, когда ajax будет успешным при success работе.

Что-то вроде этого:

$('#request').on("submit", function(e) {
// Added 
e.preventDefault();

$(e.currentTarget).find("div.error").hide();
var _data = $(e.currentTarget).serialize();
var obj = $("#track_request").val();
if(obj == ""){
    $("#track").text("Enter Request Number.");
    $("#track").fadeIn(1000);
    setTimeout(function() {
      $("#track").fadeOut(1000);
    }, 2000);
    // Not needed
    //e.preventDefault();
}
$.ajax({
      type: "POST" ,
      url: "/track",
      data: _data,
      success: function(data) {
          // Added
          $('#form_id').submit();
      },
      error: function(xhr, textStatus, errorThrown, event) {
            if(obj != "" && xhr.status == 500){
                $("#track").text("Enter Valid Request Number.");
                $("#track").fadeIn(1000);
                setTimeout(function() {
                   $("#track").fadeOut(1000);
                }, 3000);
            }
      },
});

});

Изменение: вы также можете добавить вызов ajax в else чтобы он не выполнялся, когда первая проверка поля не удалась.

  • 0
    я делаю возврат хорошо (views.html.request.render ("Запрос", p)); с моего контроллера, так что после добавления e.prevetDefault (); во всем мире эта функция возврата не срабатывает.
  • 0
    Помогите мне, пожалуйста.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню