我想从网站前端的跨域访问数据。 我有三个网站:a.com,b.com和c.com。网站a.com是前端。网站b.com是后端(API)。 c.com是CAS服务器。
我可以直接访问浏览器上的http://b.com/example_test.php。它成功跳转到CAS页面进行登录。然后在登录后,API返回数据。
我想让a.com获取b.com的数据。我的代码是:
我的前端HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<title>Title</title>
</head>
<body>
<h3 id="article_title"></h3>
<p id="article_text"></p>
</body>
<script type="application/javascript">
var xmlHttpReq = null;
if (window.ActiveXObject) {
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
xmlHttpReq = new XMLHttpRequest();
}
if (xmlHttpReq !== null) {
xmlHttpReq.open("get", "http://b.com/example_test.php");
xmlHttpReq.timeout = 10000;
xmlHttpReq.send("");
xmlHttpReq.onreadystatechange = doResult;
}
function doResult() {
if (xmlHttpReq.readyState === 4) {
console.log(xmlHttpReq.status);
if (xmlHttpReq.status === 200) {
var data = xmlHttpReq.responseText;
var json_data = JSON.parse(data);
/**
do somethin.
*/
}
}
}
</script>
</html>
我的后端api example_test.php:
<?php
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:GET,POST,PUT,DELETE,PATCH,HEAD,OPTIONS');
header('Access-Control-Allow-Headers:Origin,Content-Type,Authorization,X-auth-Token');
require_once './MyCAS.php';
$resp = array(
'stats' => -1,
'msg' => 'Empty!'
);
if (array_key_exists('username', $_COOKIE)) {
/**
do something
**/
} else {
phpCAS::client(CAS_VERSION_2_0, "mycase.server.com", 443, "/cas", false);
phpCAS::setNoCasServerValidation();
phpCAS::forceAuthentication();
if (phpCAS::isAuthenticated()) {
$username = phpCAS::getUser();
if ($username !== null) {
$token = md5($username.date('s', time()).date('i', time()));
setcookie('username', $username, time() + 1*86400, '/');
setcookie('token', $token, time() + 1*86400, '/');
/**
do something
**/
}
}
}
?>
但是当我在浏览器上访问a.com时,我没有跳转到CAS页面。我不明白这个问题。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
您无法通过ajax重定向来电者的请求。使用JavaScript实现它的一种方法。
PHP示例:
<?php
echo 'redirect';
关于HTML JavaScript:
$.ajax({
type: 'POST',
async: false,
url: '/users',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(payload),
success: function(data, textStatus, jqXHR){
if(data == 'redirect'){
console.log(jqXHR.status);
window.location.href= "/thankyou.html";
}
}
});