我想知道当你有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 ...
目前它还没有用。 有什么建议吗?
答案 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无法加载资源
我有几个问题:
答案 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;重定向到感谢页面。
感谢大家的帮助!