如何解决页面重定向jquery的问题?

时间:2013-09-20 12:43:32

标签: jquery

发生错误时,我的页面会在另一页上重定向而不显示错误消息。

有没有办法写e.preventDefault();在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 :(得分:0)

您可以将e.preventDefault()设置为第一行,然后在success函数ajax成功时提交表单。

这样的事情:

$('#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中,以便在第一次字段检查失败时不执行该操作。