跨域

跨域:协议、域名、端口、任何一个不一样,都是跨域;

          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() { //请求出错处理 } });
复制代码
 
$.ajax({
      type:"get",                              //请求方式,此处给post仍会以get方式提交 
      dataType:"jsonp",                  //预期服务器返回的数据类型
      jsonp:"callback",                    //在一个jsonp请求中重写回调函数的名字 
      jsonpCallback:"callback",      //为jsonp请求指定一个回调函数名 
      url:"http://127.0.0.1/login",      //请求地址
      data:"{name:'张三',pass:'123456'}", //请求参数 
      success:function (data) {
         //请求成功后的处理 }
      }, 
'json');

 

                           

 

posted @ 2018-04-20 18:16  Angie_阳  阅读(125)  评论(0编辑  收藏  举报