【问题标题】:history.back() not working after ajax success functionajax成功功能后history.back()不起作用
【发布时间】:2013-08-16 14:26:27
【问题描述】:

我想在Ajax success function之后可以返回上一页。

<div id="dialog" title="Complain">
       <form id="komenform">
                <label>Model :</label>
                <input type="text" id="comodel" name="comodel"/>
                <label>Komentar :</label>
                <textarea id="comment" name="comment" rows="5" cols="20" ></textarea>
                <button id="submitcom" type="button" class="ui-state-default ui-corner-all"><span>Submit </span></button>
                <input name="action" value="inputcom" type="hidden">
       </form>
</div>

$("#komenform").validate({
        rules:{
                comodel:{
                          required:true
                          },
                comment:{
                        required:true
                        }
                }
        });

$("#submitcom").click(function() {
      if($("#komenform").valid()) {
            var params=$("#komenform").serialize();
            $.ajax({
                    type:"post",
                    url:"/QA/process2.php",
                    data:params,
                    cache :false,
                    async :false,
                    success : function() {
                           $("#comodel").val("");
                           $("#comment").val("");
                           $("#dialog").dialog('close');
                           history.back();
                           },
                    error : function() {
                           alert("Data failed to input.");
                           }
                    });
            }
      });

但它不会起作用。


更新

在我尝试删除 dialog('close') 后它可以工作:

success : function() {
       $("#comodel").val("");
       $("#comment").val("");
 //      $("#dialog").dialog('close');
       window.history.go(-1);
       return false;
       },

但是,我需要双击提交按钮。为什么?

【问题讨论】:

  • 这听起来可能很傻,但您并没有在那里执行异步请求。那么为什么要使用 AJAX 呢?将表单提交到 PHP 页面然后使用 header() 不是更好吗?
  • 应该工作,除非 history.back() 没有找到任何可返回的内容(即,没有上一页或上一页与当前页面)。究竟会发生什么?您是否尝试过 console.log() 在您的成功职能部门内的一些事情?
  • 您是否使用后退按钮来保留上一页中保存的某些信息,例如输入字段?如果是这样,您可能需要考虑另一种保留数据的方法,例如 cookie 或 URL 变量。如果您在提交表单时试图阻止页面更改,请在您的 .click(function(){ 末尾添加 return false;
  • 直到 dialog('close') 才有效。我只是想使用 Ajax 可能有人可以给我一些建议。
  • 你试过了吗:history.go(-1),虽然它们本质上是一样的。

标签: jquery ajax double-click


【解决方案1】:

它有效..

success : function() {
       $("#comodel").val("");
       $("#comment").val("");
 //      $("#dialog").dialog('close');
       window.history.go(-2);
       return false;
       },

只需将-1 更改为-2

【讨论】:

    【解决方案2】:

    建议:

    • 由于 async:false,我在这里没有发现 AJAX 的任何用途
    • 调用 PHP 页面并使用标头重定向到您想要的页面
    • ajax 调用成功后通过 console.log 调试代码
    • 尝试 window.history.back() 而不是 history.back()

    【讨论】:

    • [循环] 终止;选择器找到的零个元素
    • 你能告诉更多关于你试图返回的页面吗..检查你是否在第一页并试图返回
    • 仍然无法正常工作。此页面(有对话框)是单击上一页中的某个按钮后的链接页面。
    • 尝试 window.history.back() 而不是 history.back()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多