我有以下代码,应该在AJAX方法完成后重定向到我网站的索引页面。它重定向,但页面没有加载任何内容,它只是一个带背景的空页。
function login(){
var uname = document.getElementById("UserName").value;
var upass = document.getElementById("Password").value;
var response = $.ajax({ type: "POST",
url: "../../php_scripts/ajax.php",
data: "call=login(" + uname + ", " + upass + ")",
async: false
}).responseText;
window.location.replace("http://www.domainname.com");
}
什么可能导致这个问题?这可能是服务器问题吗?
[编辑]
此外,如果我将重定向调用置于AJAX之上,则所有内容都会正确加载。
[编辑2]
如果我使用异步AJAX和任何类型的回调方法,它会导致完全相同的问题。我开始认为这是一个jQuery错误。
答案 0 :(得分:0)
您需要在ajax调用成功时重定向。
如果您的请求是async:false,那么您不应该使用ajax.done(),ajax.fail()等方法来注册回调方法,而是需要使用success / error / complete选项传递回调方法ajax电话
$.ajax({
async: false,
success: function(){
window.location.replace("http://www.domainname.com");
},
error: function(){
},
complete: function(){
window.location.replace("http://www.domainname.com");
}
})
答案 1 :(得分:0)
(代表OP发布)。
经过几个小时的修补后,我发现了问题的罪魁祸首。它与JavaScript或AJAX无关 - 实际上错误源自SQL数据库。设置关系约束设置不正确导致我的PHP记录更新方法失败。
这使得该方法将null返回给调用方法,然后将其保存到变量中,然后在该变量上调用成员方法。在null类型上调用成员方法打破了PHP,这就是我的页面上没有显示任何内容的原因。
答案 2 :(得分:-1)
使用complete
回调重定向到所需的页面。完成请求后,您将被重定向到该页面。
试试这个:
function login(){
// use jquery anyway if you reference to this
var uname = $("#UserName").val();
var upass = $("#Password").val();
var response = $.ajax({ type: "POST",
url: "../../php_scripts/ajax.php",
data: "call=login(" + uname + ", " + upass + ")",
async: false,
complete: function() {
// redirects is done with below code
window.location.replace("http://www.domainname.com");
}
}).responseText;
}