Javascript 在AJAX中处理PHP头
我正在使用AJAX进行表单验证。如果用户正确完成表单,它将重定向到另一个页面,否则打印错误(纯HTML)Javascript 在AJAX中处理PHP头,javascript,php,ajax,validation,Javascript,Php,Ajax,Validation,我正在使用AJAX进行表单验证。如果用户正确完成表单,它将重定向到另一个页面,否则打印错误(纯HTML)例如: 如果表单中存在错误,则PHP文件将响应: There is an error! 如果没有任何错误,PHP文件将执行: header("Location: http://example.com/successful"); exit(); 但在AJAX中,我只处理简单的HTML响应: success: function(response) { _desireHTMLelment.inn
例如: 如果表单中存在错误,则PHP文件将响应:
There is an error!
如果没有任何错误,PHP文件将执行:
header("Location: http://example.com/successful"); exit();
但在AJAX中,我只处理简单的HTML响应:
success: function(response) {
_desireHTMLelment.innerHTML = response;
}
我知道有一种方法可以使用json\u encode()
,但是,我仍然无法将普通HTML和json
进行分类我有什么办法可以做到这一点吗?谢谢你的支持
编辑:我正在使用香草JavaScript
这就是系统的工作原理:
用户填写表单=>AJAX发送请求=>PHP处理请求=>返回纯HTML错误或重定向页面=>AJAX接收响应,分类是错误还是HTML错误=>找到正确的方法来处理响应,如昆廷所述,浏览器会自动跟随
位置
标题并重定向页面,在这种情况下,您的Ajax响应将包含新页面的内容,您将无法访问位置
标题,因为它已丢失并被新页面的内容替换。您可以为标题使用不同的名称
从代码中可以看出,您使用的是jQuery,而不是JavaScript。您可以如下方式访问jQuery中的标题:
success: function(response, status, request){
var url = request.getResponseHeader('RedirectURL'); //RedirectURL: your header's name.
}
在JavaScript中,使用XMLHttpRequest
对象的函数来获取标题:
var headers = request.getAllResponseHeaders();
但与jQuery不同,您必须自己分割和处理头
从标题中获取url后,可以使用:
location.replace(url);
这将模拟重定向。如果要模拟链接单击,请使用:
location.href = url;
或者,您可以在响应中发送URL,而不是发送标题。如果它总是以http开头,则可以执行以下操作:
success: function(response) {
if (response.substring(0, 4) == "http") {
location.href = response;
} else {
_desireHTMLelment.innerHTML = response;
}
}
或者,您可以这样标记它并查找标记:
RedirectURL: http://example.com/successful
或者可以将其设置为JSON对象:
{"RedirectURL": "http://example.com/successful"}
如果浏览器在HTTP响应中接收到
位置
标题,则它将遵循重定向并获取要重定向到的文档
无法使用JS读取重定向响应
您的请求有两种可能的结果:
有错误代码>
有错误代码>
success: function(response) {
if (response.indexOf("There is an error!" == -1) {
// Handle the error
} else {
_desireHTMLelment.innerHTML = response;
}
}
也就是说,更好的方法是更改服务器端代码,使其提供清晰的API,而不是试图从HTML中获取数据。根据响应在javascript中执行重定向。因此,您需要从php发送响应,而不是使用header()
重定向。@jeroen我知道,我为此使用了json\u encode
,但是,我不知道如何使用纯HTMLOr对其进行分类。如果ajax没有给出响应,请提交表单errors@mplungjan,如何检查PHP是否没有发送任何错误?这就是问题所在thing@WebDegBrian你不应该。发送回纯文本或发送回json;根据不同的情况,没有不同的反应。您也可以用json发送html。谢谢,但我使用request.getAllResponseHeaders().trim().split(/[\r\n]+/)
要获取标题数组是的,这是您应该使用的,那么有什么问题吗?我正在我的网站上进行测试。如果是正确的,我将投票支持你的答案你不能像那样访问位置
标题。是的,昆汀是对的。我没有注意到您的头的名称是标准重定向头。查看我的更新答案。这就是系统的工作方式:用户填写表单,AJAX将其发送到指定的PHP文件,PHP处理它,返回普通HTML或重定向页面。但是如果我使用AJAX,它只会重定向我文档的一部分。你真的应该修复服务器端脚本,停止返回基本html或重定向,让它始终返回一个json对象,并说明如何处理AJAX的结果。如果您想在有人关闭JS的情况下重复使用脚本(傻瓜),那么请始终在ajax请求中传递一个变量,这样您就可以讨论如何返回数据(json或基本html/重定向)。@IncredibleHat,谢谢,我将尝试按照您的说明进行操作。您误解了这个问题。在您提到的两种可能结果中的第一种结果中,响应可能包含多条错误消息中的一条,因此除非您标记它(例如,ERR:有错误!
),或者将其设置为JSON对象,否则无法检测到它。至于第二种可能的结果,您的解决方案太浪费资源了。为什么让Ajax重定向到页面,然后检测到并再次重定向?(您将结果分配给了一个元素,但OP想要重定向,因此您需要用结果替换整个页面)。