PHP处理Ajax请求与Ajax跨域
后端笔记 2017-03-22 10:21:19

PHP判断是否为Ajax请求

示例:前端页面发送普通的ajax请求给后端test.php。

PHP Code复制内容到剪贴板
  1. $.ajax({   
  2.     type: "GET",   
  3.     url: 'test.php',   
  4.     success: function(data) {   
  5.         console.log(data);   
  6.     }   
  7. });  

服务端test.php可以判断该请求是不是Ajax异步请求,然后根据业务需求做出响应的回应。
以下是服务端test.php的简单验证是否为ajax请求的代码:

PHP Code复制内容到剪贴板
  1. function isAjax() {   
  2.     return @$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ? true : false;   
  3. }   
  4.    
  5. if (isAjax()) {   
  6.     echo 'Ajax Request Success.';   
  7. else {   
  8.     echo 'No.';   
  9. }  

 

Ajax发起JSONP跨域请求

示例:前端页面发起JSONP请求:

XML/HTML Code复制内容到剪贴板
  1. $.ajax({   
  2.     type: "get",   
  3.     data: "random="+Math.random(),   
  4.     url: "http://xxx.net/phpajax/jsonp.php",   
  5.     dataType: "jsonp",   
  6.     jsonp: "callback",   
  7.     success: function(data) {   
  8.       console.log(data);   
  9.     },   
  10.     error: function() {   
  11.       console.log('Request Error.');   
  12.     }   
  13. });  

ajax请求参数中有dataType: "jsonp"和jsonp: "callback",这个就表明了我要请求的是jsonp,并且会有回调callback返回。当然,我们也可以自定义回调函数,如jsonpCallback:"success_jsonpCallback"

还可以简单的写成:

XML/HTML Code复制内容到剪贴板
  1. jQuery.getJSON('http://xxx.net/phpajax/jsonp.php?callback=?",{   
  2.   random: Math.random()   
  3. }, function(data){   
  4.   console.log(data);   
  5. });  

php后端服务代码可以这样写(注意输出返回的格式):

PHP Code复制内容到剪贴板
  1. $data = array(   
  2.     'rand' => $_GET['random'],   
  3.     'msg' => 'Success'   
  4. );   
  5. echo $_GET['callback'].'('.json_encode($data).')';  

 

Ajax跨域请求:CORS

CORS,又称跨域资源共享,英文全称Cross-Origin Resource Sharing。假设我们想使用Ajax从a.com的页面上向b.com的页面上要点数据,通常情况由于同源策略,这种请求是不允许的,浏览器也会返回“源不匹配”的错误,所以就有了“跨域”这个说法。但是我们也有解决办法,我们可以再b.com的页面header信息中增加一行代码:

XML/HTML Code复制内容到剪贴板
  1. header("Access-Control-Allow-Origin: *");  

当我们设置的header为以上信息时,任意一个请求过来之后服务端我们都可以进行处理和响应,那么在调试工具中可以看到其头信息设置,其中见红框中有一项信息是“*Access-Control-Allow-Origin:* ”,表示我们已经启用CORS,如果要限制只允许某个域名的请求,可以这样:

XML/HTML Code复制内容到剪贴板
  1. header("Access-Control-Allow-Origin: http://www.yoyo88.cn");  

示例:通过CORS跨域请求数据

XML/HTML Code复制内容到剪贴板
  1. $.ajax({   
  2.     type: "get",   
  3.     data: "random="+Math.random(),   
  4.     url: "http://xxx.net/phpajax/ajax.php",   
  5.     dataType: "json",   
  6.     success: function(data) {   
  7.         console.log(data);   
  8.         $("#result_3").html(data.msg+':'+data.rand);   
  9.     },   
  10.     error: function() {   
  11.       $("#result_3").html('Request Error.');   
  12.     }   
  13. });  

这就实现了发起跨域异步请求,并得到响应。

 

 

本文来自于:http://www.yoyo88.cn/note/backend/92.html

Powered by yoyo苏ICP备15045725号