跨域:协议、域名、端口、任何一个不一样,都是跨域;
1、浏览器处于安全的考虑限制
2、跨域
3、XHR(XMLHttpRequest)请求 这三个同时满足即为跨域;
原因:来源于跨域安全策略,默认情况,XHR(XMLHttpRequest)对象只能访问与包含它的页面位于同一个域中的资源,这种安全策略可以预防恶意行为;
解决思路:只要发出的不是XHR(XMLHttpRequest)请求 ,就不是跨域, ----JSONP方法;
JSONP思路:动态的创建script,在script里发出跨域请求;
JSONP知识补充:JSONP JSON with Padding 是json的一种补充;
使用动态的创建script标签,返回js代码,返回的json对象会被当成js代码处理,会报错;需要后台改动,
弊端:1、服务器需要改代码;2、只支持GET方法 3、发送的不是XHR请求
与普通ajax 区别:1、实质不同 ajax的核心是通过xmlHttpRequest获取非本页内容;jsonp的核心是动态添加script标签调用服务器提供的js脚本
2、发送请求的类型不一样:ajax:XHR ; JSONP:script
3、返回的类型不一样:ajax:json对象 jsonp:js脚本;
JSONP书写:
$.ajax({ type:"get", //请求方式 async:true, //是否异步 url:"http://www.domain.net/url", dataType:"jsonp", //跨域json请求一定是jsonp jsonp: "callbackparam", //跨域请求的参数名,默认是callback 自己可以配合后端更改 //jsonpCallback:"successCallback", //自定义跨域参数值,回调函数名也是一样,默认为jQuery自动生成的字符串 data:{"query":"civilnews"}, //请求参数 beforeSend: function() {
//请求前的处理 }, success: function(data) { //请求成功处理,和本地回调完全一样 }, complete: function() { //请求完成的处理 }, error: function() { //请求出错处理 } });