ajax成功后window.location.href不起作用

12

我已经试图解决这个问题有一段时间了,但是我无法让它工作。当用户点击链接时,会要求确认是否执行此操作,然后将进行一个 ajax 调用。所调用的脚本正常工作,并返回一个字符串以指示重定向位置。

我在这里看到了几篇关于 window.location 问题的帖子,但没有一个能够解决我的问题。

我的代码:

function confirm(a,b,c){
        var r=confirm("Are you sure to do this?");
        if(r==true){
            $.ajax({
                type: "POST",
                url: "/process-action.php",
                async: false,
                data: {a:a,b:b,c:c},
                success: function(data){
                    window.location.href = data;
                }
            });
        } else {
            return false;
        }
    }

如果我使用alert(data)代替window.location.href = data,我可以看到正确的数据已传递。例如/user/homepage。然而,重定向没有发生。

我尝试用完整的URL替换相对路径,但这也没有起作用。

4个回答

20

尝试使用assign()替代:

window.location.assign(data);

window.location.href 是一个属性,而不是方法。


@reena,它应该可以正常工作。检查控制台是否有错误。 - Rory McCrossan
$.ajax({ method : "POST", url : url, data : $("#frmQuestionnaire").serialize(), // 序列化表单元素。 }).done(function(msg) { alert("问题的响应已保存。"); var data = window.location.href + "&openModal=1&savedRec=" + currentRec; window.location.assign(data); //alert(location.href); location.reload(); $('#detQuestionnaire').modal('hide'); }); - Reena

1

位置 assign() 方法

The assign() method is supported in all major browsers.

0
你可以使用这个
和你相同的脚本将会起作用。

请进一步解释。 - Panther
当您使用ajax提交表单时,由于表单将提交给指定的操作,因此在成功后无法重新加载位置。因此,我们需要添加onsubmit函数,以便表单不会被提交,您可以使用ajax发送数据并成功重新加载页面而不出现错误。 - Rajesh Kakadiya

-1

你也可以使用window.location = "someurl";


1
这种方法在安卓上的现代Chrome移动浏览器中不起作用。应该使用Rory McCrossan答案中的.assign()方法。 - Nikita Mendelbaum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接