解决跨域第一种方法: header头
//解决跨域问题
header("Access-Control-Allow-Origin:*");
header('Access-Control-Allow-Methods:POST');
header('Access-Control-Allow-Headers:x-requested-with, content-type');
创建一个中间件
php artisan make:middleware Api
在中间件写上这三行代码,分组使用中间件
第二种方法: jsonp格式
利用不拦截script
的特性
把请求地址写入script
标签中
例:<script src="http://127.0.0.1/jsonp.php"></script>
php 代码 使用 js方式把数据返回
例:
<?php
$data=['ret'=>1,'msg'=>'xxx'];
$data=json_encode($data);
echo "alert($data)";
//这样每次访问就会alert一次
//所以在html前端 定义一个匿名函数方法用来接收返回的数据
//前端:
<script src="http://127.0.0.1/jsonp.php">
function aaa(res) {
console.log(aaa);
}
</script>
后端:
<?php
$data=['ret'=>1,'msg'=>'xxx'];
$data=json_encode($data);
echo "aaa($data)";
//这样后台不能每次询问前台返回的匿名方法名就定义一个变量传过来
<script src="http://127.0.0.1/jsonp.php?jsonpcallback=aaa">
function aaa(res) {
console.log(aaa);
}
</script>
php代码:
<?php
$data=['ret'=>1,'msg'=>'xxx'];
$data=json_encode($data);
$function_name=$_GET['jsonpcallback'];
echo "$function_name($data)";
这样就可以进行下面操作了
jquery
封装的解决跨域问题的jsonp
方法:
<script>
//ajax请求
$.ajax({
url: "http://127.0.0.1/jsonp.php",
dataType: "jsonp", //指定服务器返回的数据类型
jsonp: "invoker", //指定参数名称
jsonpCallback: "data", //指定回调函数
success:function (res) {
console.log(res)//返回值
}
});
</script>
php 页面接收 $_GET['invoker']
;参数