我的ajax请求中的成功功能未执行

时间:2019-01-30 20:35:53

标签: php ajax function

第一个问题:页面将重定向,但我的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​​请求成功。我已经阅读了有关该主题的其他问题,并尝试了几种方法,但到目前为止都没有奏效。

2 个答案:

答案 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");
  }

});