Ajax成功时的Javascript重定向


Javascript redirect on Ajax success

我有一个问答类型的应用程序。每个问题有两个答案,其值为1或2。测验结束后,如果他们的分数低于10分,他们会被重定向到一个页面。

这是我对此部分的代码。

while (n < numResults) {
    increment = minScore + (interval * n);
    if (totalScore <= increment) {
        if(totalScore <= 10) {
            $.ajax({
                method: "POST",
                url: "handleData.php",
                dataType: "json",
                data: { answers: ansArray, page: window.location.href }
            })
            .done(function( msg ) {
                window.location.href("www.page2.html");
            });
        } 
        return;
    } else {
        n++;
    }
}

我有几件事要解决。首先,在重定向之前,一些数据(答案和url(被发布到PHP,这样我就可以处理它。我传递的一件事是当前窗口的url。我这么做的原因是url的格式类似

www.page1.com?a=1&b=2&c=3

在PHP中,我解析这个url并获取值。

我的第一个问题是,尽管数据成功地发送到PHP并进行了处理,并返回了Success的响应,但done函数似乎从未启动,因此不会发生重定向(我在该函数中发出了警报以确保其不发射(。在PHP中,在我处理数据后,我会进行

var_dump($response); //Outputs Success
return json_encode($response);

我想做的第二件事是重定向url(page2.html(。在这个页面中,我有一个按钮。这个按钮有一个标准链接,然后我需要从最初的url中给它一些参数。所以这个页面按钮可能有点像

www.externallink.com?a=1&c=2

如何将原始url参数放入重定向url上的按钮中?

感谢

使用下面的函数代替done:

 $.ajax({
        method: "POST",
        url: "handleData.php",
        dataType: "json",
        data: { answers: ansArray, page: window.location.href }
        success:function(data){
            window.location.href("www.page2.html");
        });
    })

对于您的第一部分:

尝试放入jQuery ajax调用的错误函数。有时,当结果的返回类型与ajax调用的预期数据类型不匹配时,结果会作为错误响应出现。

error: function (data, status, e) {
        }

对于您的第二部分:

在处理程序中附加按钮的点击事件,并使用window.location.search读取当前URL查询字符串,然后使用重定向

window.location = newURL + "extra query params";
// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax( "example.php" )
  .done(function(data, textStatus, jqXHR) {
    alert( "success" );
  })
  .fail(function(jqXHR, textStatus, errorThrown) {
    alert( "error" );
  })
  .always(function(data|jqXHR, textStatus, jqXHR|errorThrown) {
    alert( "complete" );
  });

如果从未调用过.done()回调,请尝试在.fail().complete()回调函数中设置调试器或警报。检查ajax调用过程中是否有错误,以及调用是否有完整的语句。此处提供更多信息:http://api.jquery.com/jquery.ajax/