2018-02-24
发表者 Venus
ajax请求跨域问题已关闭评论
比如当前浏览的地址为 http://www.a.com/login.php
login.php 里有个 ajax 的 post 请求到 http://www.a.com/login.php ,post数据中有用户名、密码,
后台判断是否正确,返给客户端处理结果,浏览器再接着跳转。
这是正常的处理流程,如果post到另一个域名下,就产生跨域问题了。浏览器会停止执行。
下面是本地测试代码:
访问地址为:http://cp/admin/login.php
ajax请求地址是:http://test/cross.php
<script>
function login(){
var postdata = $(".form-signin").serialize();
$.post("http://test/cross.php", postdata, function(data){
if(data.s == 0){
location.href = "/admin/index.php";
}else{
$(".alert").text(data.err).slideDown(200);
$(".form-signin .form-control").addClass("refuse");
}
}, "json");
}
</script>
cross.php代码如下:
<?php
echo json_encode(array('s'=>0));
这样测试以后,打开chrome调试,发现是无法触发跳转。浏览器发现是跨域请求(不安全),在浏览器中就直接不执行了。

把cross.php添加一个响应头。
<?php
header('Access-Control-Allow-Origin:*');
echo json_encode(array('s'=>0));
再次测试发生了跳转。
*号代表所有域

还有一种方法就是在nginx或者apache中,添加一个响应头。
如nginx下:
server {
listen 80 default_server;
add_header Access-Control-Allow-Origin ‘*’ ;