一、PHP使用curl请求解决跨域问题:
后台直接调用curl函数即可,比如,我封装了一个http_request()的函数,直接调用即可。
$res = http_request('http://域名?参数');
halt($res);
需要注意的是:被请求的后台接口在return之前需要加以下的,不然会有跨域问题:
header('content-type:application:json;charset=utf8');
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST');
header('Access-Control-Allow-Headers:x-requested-with,content-type');
——这样浏览器接收到数据的时候就可以了。
上面的header('Access-Control-Allow-Origin:*');是指定哪些域名可以访问的。可以修改如下:
//只允许一个域名访问
header('Access-Control-Allow-Origin:http://www.client.com');
//允许多个域名访问
$allowOrigin = [
'http://www.client.com',
'http://www.client2.com'
];
header('Access-Control-Allow-Origin:'.$allowOrigin);
二、前端AJAX请求跨域,使用jsonp
示例代码:
前端:
$.getJSON("http://tmp.windyet.com/index/index/test?jsoncallback=?", function(data) { console.log(data); });
PHP:
public function test(){ header('Content-type: application/json'); //获取回调函数名 $jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']); //这就是输出的json数据 $json_data = '["linfeng","xufusheng"]'; //输出jsonp格式的数据,请注意,格式是固定的。 echo $jsoncallback . "(" . $json_data . ")"; }