php – 通过常规表单提交或Ajax请求访问时使浏览器重定向的表单 – 这可能吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 通过常规表单提交或Ajax请求访问时使浏览器重定向的表单 – 这可能吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1767字,纯文字阅读大概需要3分钟。
内容图文
我有一个带有表单的网页.当用户提交表单时,我希望服务器使浏览器重定向到表单操作的不同页面.现在,我通过使用PHP的header函数来发送302状态代码.它工作正常.
我试图让服务器上的页面以相同的方式重定向浏览器,无论它是否正常提交(没有Javascript)或通过Ajax.我尝试通过将窗口位置设置为Location头中的任何URL来实现此目的.我正在使用jQuery,并进行如下调用:
$.ajax({
url: this.action,
type: "POST",
data: getFormData(this),
complete: function(request) {
window.location.assign(request.getResponseHeader("Location"));
}
});
但是,这没有用.在考虑之后,我意识到这并不是很令人惊讶.在Ajax请求中,浏览器应该在更改readyState之前透明地处理重定向响应,例如302代码.当完整函数运行时,它正在查找最终目标中的Location标头而未找到它.
作为实验,我尝试使用Location标头发送200状态代码.我尝试了Ajax请求,它工作正常.但是,当我执行非Ajax提交时,它不起作用.浏览器转到表单操作页面并保持在那里,就像它忽略了Location标题一样.
有没有办法在两种情况下都使同一页面重定向,而服务器不必知道或关心请求是否是Ajax请求?
如果这很重要,我在各种浏览器(IE8,IE7,IE6,Firefox 3.5,Chrome)中尝试了表格,每次都有类似的结果.此外,我正在做一个帖子请求,以避免碰到IE的2083字符URL长度限制.
解决方法:
HTTP 302 response are consumed silently by XmlHttpRequest implementations(例如jQuery的ajax函数).这是一个功能.
我过去解决这个问题的方法是检测XmlHttpRequests并发出"Content-Location" header(而不是“Location”标题).最常见的跨库工作方式是检查服务器端代码中的“X-Requested-With”http头(jQuery,Prototype,Mootools等设置此代码):
if (@$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
header('Content-Location: ' . $redirect_url);
} else {
header('Location: ' . $redirect_url);
}
您仍然需要特殊情况下的客户端代码:
$.ajax({
// ...
complete: function(xhr) {
var redirect_url = xhr.getResponseHeader("Content-Location");
if (redirect_url) {
window.location = redirect_url;
}
}
})
内容总结
以上是互联网集市为您收集整理的php – 通过常规表单提交或Ajax请求访问时使浏览器重定向的表单 – 这可能吗?全部内容,希望文章能够帮你解决php – 通过常规表单提交或Ajax请求访问时使浏览器重定向的表单 – 这可能吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。