第一个问题:页面将重定向,但我的AJAX请求被忽略了。
新问题: AJAX请求发布了数据,但页面不会重定向。
我的目标是发送AJAX请求,确认数据已发送并存储在服务器上,然后在完成后重定向到新页面。
我尝试在AJAX请求中使用成功函数来实现此目的。如果我将页面重定向放在AJAX请求之外,它将重定向页面,但AJAX响应被暂停。如果我将页面重定向放在AJAX请求中,则数据发布但页面不会重定向。
$.ajax({
type: "POST",
url: "saveData.php",
dataType: "text/plain",
ContentType: "charset=utf-8",
data: {"data": surveydata, "userID": userID, "trialType": trialType},
success: function (data) {
if (!data.error) {
console.log("success");
window.location.replace("anotherpage.html");
} else {
console.log("error");
}}})
我也尝试过这种方式:
$.ajax({
type: "POST",
url: "saveData.php",
dataType: "text/plain",
ContentType: "charset=utf-8",
data: {"data": surveydata, "userID": userID, "trialType": trialType},
success: function (data) {
console.log("success");
window.location.replace("anotherpage.html");
}}})
我想实现成功的页面重定向和数据发布。我不知道如何强制页面重定向以等待AJAX请求成功。我已经阅读了有关该主题的其他问题,并尝试了几种方法,但到目前为止都没有奏效。
答案 0 :(得分:0)
我解决了自己的问题。即使数据发布得很好,我也无法获得成功的AJAX请求的确认。因此,我开发了一种解决方法:如果数据POST很好,那么我需要做的就是在延迟后重定向页面(以使数据有时间发布)。
所以我的提交按钮执行两个功能:
onclick="saveData(); redirect()"
然后,AJAX请求正常进行:
$.ajax({
type: "POST",
url: "saveData.php",
dataType: "text/plain",
ContentType: "charset=utf-8",
data: {"data": surveydata, "userID": userID, "trialType": trialType},
})
同时,我启动一个计时器来重定向页面:
function redirect(){
document.getElementById("submitBtn").disabled = true;
document.getElementById("submitBtn").value = "Redirecting...";
setTimeout(function(){ window.location.replace("anotherpage.html"); }, 3000);
}
这样可以使页面在3秒钟后重定向,从而使AJAX函数有时间先发布数据。这不是一个完美的解决方案,因为服务器可能会挂起并且数据可能会丢失,但是到目前为止,我的测试表明时间已经足够。如果我真的想保持谨慎,可以增加这段时间,但是我觉得没有必要。
我也想说,我感谢那些有帮助的意见。我想很多次,如果某个问题在SO上类似,人们就会忽略它,因为“显然,以前已经回答过”。但是这些解决方案都不适合我,我认为我的问题很独特。
答案 1 :(得分:-1)
最后还有一个额外的}
并导致了问题&为什么您走得很远?只需在上面的POST请求中尝试以下代码即可:
$.post("saveData.php",
{
"data": surveydata,
"userID": userID,
"trialType": trialType
},
function(data, status){
if (status === 'success') {
console.log("success");
window.location.replace("anotherpage.html");
}
});