2013-09-20 7 views
0

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

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

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

Это мой Аякса код:

$('#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); 
       } 
      }, 
    }); 

});

+0

Если вы используете AJAX для представить, почему бы не иметь 'e.preventDefault();' в самой первой строке этой функции? – DevlshOne

+0

Я не понимаю. У вас нет 'e.preventDefault();' вообще. Поэтому, когда вы запускаете отправку (например, нажав кнопку submit), она будет перенаправлять вас в любом случае. – nbar

ответ

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

Я делаю return ok (views.html.request.render («Запрос», p)); от моего контроллера, после добавления e.prevetDefault(); глобально эта функция возврата не загорается. – user2798785

+0

, пожалуйста, помогите мне. – user2798785

Смежные вопросы