跨域
出现的原因:域名,协议,端口不相同
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 |