2011-12-24 205 views
0

我有以下按钮形式:,防止我的表单提交

<input id="test2" class="formbutton" type="submit" value="Play again" /> 

按提交大火此javascript:

$("#test2").click(function(){ 
     $.ajax({ 
      type: "POST", 
      data: $("#form").serialize(), 
      cache: false, 
      url: "insert.php" 
     }); 
     return false; 
    }); 

这一切工作精细。问题是,当我尝试广告location.href="mahjong.php?layout=win";我要的是,当我按下这个按钮,提交表单并加载URL mahjong.php布局=赢得

如果我使用:

$("#test2").click(function(){ 
location.href="mahjong.php?layout=win"; 
$.ajax({ 
      type: "POST", 
      data: $("#form").serialize(), 
      cache: false, 
      url: "insert.php" 
     }); 
     return false; 
    }); 

我去的网址,但表单并不总是提交。如何解决这个问题。我无法编辑insert.php文件,因为这个文件也被其他按钮使用(不需要重定向)

回答

3

转到表格后链接返回,使用success处理程序:

$("#test2").click(function() { 
    $.ajax({ 
     type: "POST", 
     data: $("#form").serialize(), 
     cache: false, 
     url: "insert.php", 
     success: function() { 
      location.href = "mahjong.php?layout=win"; 
     } 
    }); 
    return false; 
}); 

这也可能是值得投入一些视觉上的通知页面上,例如微调或禁用按钮,以便用户知道正在发生的事情并且不再次单击该按钮。

+0

好的尝试这一块,我看你用'成功:函数()',另一个人是在暗示'完整:功能()'有什么区别? – Maurice 2011-12-27 12:20:46

+0

@Maurice'success'只在AJAX请求返回“成功”结果时才会发生;完成后会发生'complete',即使它返回了错误结果(例如404 Not Found)。你必须决定哪一种更适合你的应用。 – lonesomeday 2011-12-27 14:13:50

+0

感谢您的解释,它效果很好! – Maurice 2011-12-27 16:56:49

0

在ajax调用之后放置location.href,否则您可能会在发送ajax调用之前离开页面。

如果这不起作用,请将location.href放入ajax调用的回调函数中,以便在您收到服务器响应后加载新页面,以确保数据已发送。

0

只要您设置location.href,当前页面将被卸载,其上的所有脚本都将停止。

使用(延迟)完成处理程序:

$("#test2").click(function() { 
    $.ajax({ 
     type: "POST", 
     data: $("#form").serialize(), 
     cache: false, 
     url: "insert.php", 
    }) 
    .then(function() { 
     location.href = "mahjong.php?layout=win"; 
    }); 
    return false; 
});