我有一个带有Ajax登录表单的Bootstrap模式。
显示错误并且一切正常,直到 login.php 的结果为header('Location: index.php');
我像这样处理结果:
var hr = new XMLHttpRequest();
// Set content type header information for sending url encoded variables in the request
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// Access the onreadystatechange event for the XMLHttpRequest object
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
document.getElementById("status").innerHTML = return_data;
}
}
问题是,当登录成功并且header('Location: index.php');
响应时,div.status
中会打开 index.php 。
有没有一种简单的方法可以将PHP标头转换为javascript中的重定向?
答案 0 :(得分:6)
您可以检测请求是否是ajax请求。如果它返回一个具有所需位置的json对象,否则执行典型的php重定向。
<?php
function isAjax() {
return !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}
if(isAjax()) {
echo json_encode(array("location" => "index.php"));
} else {
header("Location: index.php");
}
?>
在javascript中返回json对象后,使用
重定向用户document.location = json.location;
答案 1 :(得分:1)
您应该使用javascript重写document.location
而不是发送HTTP标头。它将为用户提供与完整页面请求的传统重定向响应相同的基本体验。