readyState 4 - 重定向url是可能的吗?

时间:2011-03-03 15:58:52

标签: javascript ajax

我想知道当你有readyState == 4时,是否有可能重定向到页面..

    //load the send form
    if (sendRequest) {
        sendRequest.open("POST", urlRequest, true);
        sendRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        sendRequest.setRequestHeader("Connection", "close");
        sendRequest.onreadystatechange = displayStatus;
        sendRequest.send(sendData);
    } else {
        alert("fails"); //alert if request fails
    }
}

function displayStatus() {
    if (sendRequest.readyState == 4) {
        alert("send");
    // redirect to thank you page? 


    } else {
        alert("send fails"); 

} //end readyState

}

我不会得到200

所以在readyState 4上,我想重定向到一个页面, 在表单发送后我想重定向到页面。 在PHP邮件功能,<?php header(location: "url"); ?>不起作用 所以我真的需要在ajax / javascript ...

目前它还没有用。 有什么建议吗?

3 个答案:

答案 0 :(得分:0)

你的意思是你想在ajax成功后重定向吗? 如果是,请尝试使用jquery ajax()函数并将重定向代码添加为成功回调

http://api.jquery.com/jQuery.ajax/

post()是一个更容易的选择 http://docs.jquery.com/Post

答案 1 :(得分:0)

您的代码是否在sendRequest.onreadystatechange回调中?即使你没有预料到200回报,也应该在回调范围内。

尝试

sendRequest.onreadystatechange=function(){
  //DEBUG
  alert("ready state change: "+ sendRequest.readyStat);
  if (sendRequest.readyState == 4) {
    alert("form sended");
    window.location = "http://www.mywebsite.com";
  }
}

而Pointy是对的,服务器端将无法工作有两个主要原因,一个是已经为发出请求的页面发送了一个标题,并且因为请求的页面是AJAX所以只有请求的页面才会改变而不是当前的一个

[编辑] 你检查过错误控制台了吗?此外,这个页面是否偶然涉及框架?

[编辑2]

我为此构建了一个jsbin,它可以在Firefox和Chrome上运行... http://jsbin.com/umufi4/2/edit

我非常肯定,如果你使用'http://',那么你所遇到的位置变化不是你的问题,而是你的sendRequest是如何构建的。以下是我发现的一些错误,我确信这些错误与jsbin和远程访问相关,但如果它们存在于您的最终,则可能会阻止它转到window.location

错误: 拒绝设置不安全的标题“连接” XMLHttpRequest无法加载http://jromero.me/。 Access-Control-Allow-Origin不允许原点http://jsbin.com。 jromero.me无法加载资源

我有几个问题:

  1. 这是跨域请求吗?
  2. 您是否收到“发送”提醒框?
  3. sendRequest是全局变量吗?

答案 2 :(得分:0)

谢谢J.Romero。通过您的输入,我可以追溯问题并构建脚本有点不同。

这不是跨域问题 - 这些设置设置正确。 警报框是正确的,sendRequest是全局的,因此所有函数都可以调用它。

这导致只有1个错误,那就是形式。 有onSubmit="return checkForm(this);" action="" 它应该是onSubmit="checkForm(this); return false;" action=""

使用onSubmit事件返回值false,因此表单不会像往常一样提交。 并正确构建js和ajax以完成发送表单。 验证表格 - &gt;好的时候 - &gt;准备表格 - &gt;打电话给ajax - &gt;全部有效 - &gt;发送表格 - &gt;重定向到感谢页面。

感谢大家的帮助!