在项目中使用接口的比较多,在客户端跨域访问,jquery中只能使用jquery ajax的jsonp方法。
值得注意的是,jQuery.ajax()只支持get方式的跨域,post的方式是不支持的。
<script type="text/javascript">
// 简写形式
$.getJSON("http://www.shuchengxian.com/index.php?callback=?",
function(data){
$("#show").text(data)
});
// 完整形式
$.ajax({
async:false,
url: 'http://www.shuchengxian.com/index.php?callback=?', // 跨域URL callback参数必填
type: 'GET',
dataType: 'jsonp',
jsonp: 'jsoncallback', //默认callback
data: mydata, //请求数据
timeout: 5000,
beforeSend: function(){ //jsonp 方式此方法不被触发。原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
},
success: function (json) { //客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数
if(json.length!=0){
alert(json.actionErrors);
}
},
error: function(xhr){
// jsonp 方式此方法不被触发
// 请求出错处理
alert("请求出错(请检查相关度网络状况.)");
}
});
</script>
这种方式其实是上例$.ajax({..}) 的一种高级封装。
在服务端通过获得callback参数(如:jsonpcallback)得到jQuery端随后要回调的,
然后返回类似:”jsonpcallback(“+要返回的json数组+”)”;
jquery就会通过回调方法动态加载调用这个:jsonpcallback(json数组);
如果为jQuery默认,则为随机jsonp1356493334400之类的数据。这样就达到了跨域数据交换的目的。
JSONP是一种脚本注入(Script Injection)行为,所以也有一定的安全隐患。
注意:jquey是不支持post方式跨域的。
所以一般不建议用jsonp跨域访问 而是PHP后台控制下 添加下要访问的域名 即可不用跨域
//处理跨域
header("Access-Control-Allow-Origin:*"); //*号表示所有域名都可以访问
header("Access-Control-Allow-Method:POST,GET");
获取可以用用PHP curl也可以进行跨域访问
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18820.html