JQuery Ajax的使用/解决跨域 /php接收返回json与jsonp

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 17:16   11   0

跨域

出现的原因:域名,协议,端口不相同

Ajax语法

Ajax跨域解决

get : 添加 dataType:'jsonp'和 jsonp:'callbak'

post: 添加 dataType:'json' 和 crossDomain: true ps: dataType:jsonp只对get有效

//get 
$.ajax({
         type: "get",
   
          url: "你的请求地址",

          dataType: 'jsonp',
  
          jsonp:'callbak',
          data:{ "a":"b","c":"d"},
  
          success: function(data) {       
             console.log(data);
           },

          error: function(xhr, type) {       }
  
          });
//post
$.ajax({
            type:"post",
            url:"你的请求地址",
            data:{ 
                "a":"b",
                "c":"d"
            },
            dataType:'json',  
            crossDomain: true,    //一定要加
            success:function(result){
                console.log(result);
            },
            error:function(result){
                console.log(result);
            }
        });

php接收

解决跨域

 header('Access-Control-Allow-Origin: *');
 
 header('Access-Control-Allow-Methods: POST,GET');

返回json或jsonp数据通用方法

$_GET['callbak']为ajax中定义的jsonp属性,如果定义了返回jsonp数据,如果没定义返回json数据

function api_jsonp_encode($json)
    {
        if (!empty($_GET['callbak'])) {
            return $_GET['callbak'] . '(' . $json . ')'; // jsonp
        }
        return $json; // json
    }
if(isset($_GET['a'])){
  $json='{"name":"yovae","password":"12345"}';
  echo api_jsonp_encode($json);
}

php返回的数据的类型必须与js中设置的返回类型相同,否则会 触发error,虽然
返回的是 200 状态码,但并不会触发 success

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP