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

 跨域

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

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

你可能感兴趣的:(JavaScript)