ajax不能跨域,jsonp可以跨域

跨域的核心思想:
     调用(拿到的接口),定义(jsonp核心处理器)分别是不同的script标签里面进行跨script取数据(只有get方式进行取数据 )
 
jsonp传进来的数据是{url:'',data:{
                                   cbName='cb',(根据接口制定的命名规范,有些事叫callback)
                                   wd='aaa',
                                   ......(之后的数据都要进行字符串拼接)
                              },success:function(result){}}
一:设置默认状态(容错处理)
     json=json||{};
     if(!json.url)return;
     json.data.cbName=json.data.cbName ||'cb';
     json.data=json.data||{};
二:函数名做清除缓存处理
json.data[json.data.cbName ]='show'+Math.random();    json.data[json.data.cbName]=json.data[json.data.cbName].replace('.','');
三:data数据转成字符串
     for(var name in json.data){
          arr.push(name+'='+encodeURIComponent(json.data[name]));
     }
          var str=arr.join('&');
四:定义处理数据函数返回回调函数
     window[json.data[json.data.cbName] ]=function(result){
               success&&success(result);
               oH.removeChild(oS);//数据获取到后删除掉oS
     };
五:存放数据到script ,获取调用接口
     var oH=document.getElementsByTagName('head')[0];
     var oS=document.createElement('script');
     oS.src=json.url+'?'+str;
     oH.appendChild(oS);

1.把拿到的数据存到一个script里面它的src="https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=abb&cb=show "这里相当于数据调用的地方
其真实面目是:show({q:"abb",p:false,s:["abb变频器","abb电机","abb变频器配件","abby","bbs","abb式的词语","abbyy","abba","abb接触器","abbs建筑论坛"]});
 
2.定义
function show(json){
     json.s//取到的数据是一个数组:["abb变频器","abb电机","abb变频器配件","abby","bbs","abb式的词语","abbyy","abba","abb接触器","abbs建筑论坛"]
}
function jsonp(url//数据形参){
     //存数据到地址到新的script
     var oH=document.getElementsByTagName('head')[0];
     var oS=document.createElement('script');
     oH.appendChild(oS);
}
当某个事件触发的时候调用:
     jsonp(url//数据地址实参);

 
1.拿到jsonp接口
     拿到百度搜素接口的步骤
          1.F12
          2.Network==找开头是su的文件,并且关键词是相应的
          4.删除没有用的信息
wd             word          关键字
cb             callback     回调函数
          6.地址放入浏览器得出的数据是:

               show({q:"abb",p:false,s:["abb变频器","abb电机","abb变频器配件","abby","bbs","abb式的词语","abbyy","abba","abb接触器","abbs建筑论坛"]});
               jsonp提供的数据接口相当于一个调用函数
               所以需要在跨域的时候先定义一个函数show
          地址接口相当于是获取了这些数据
 
注意:1.人家给你接口你才能用
  2.jsonp的回调函数,必须是全局的
 
转自:http://www.cnblogs.com/shiyou00/p/5533486.html

原生javascript里jsonp的实现原理的更多相关文章

  1. jquery及原生javascript对jsonp解决跨域问题实例详解

    jquery方式 前端: $.ajax({ url: 'http://m.xxx.tv/goLottery', data: { data: data }, type: 'GET', dataType: ...

  2. 原生 JavaScript 实现 AJAX、JSONP

    相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...

  3. 原生JavaScript实现AJAX、JSONP

    相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...

  4. Javascript的jsonp原理

    Javascript的jsonp原理   首先JSON是一种基于文本的数据交换方式,或者叫做数据描述格式 当一个网页在请求JavaScript文件时则不受是否跨域的影响,凡是拥有”src”这个属性的标 ...

  5. 原生JavaScript封装的jsonp跨域请求

    原生JavaScript封装的jsonp跨域请求 <!DOCTYPE html> <html lang="en"> <head> <met ...

  6. javascript实现jsonp跨域问题+原理

    在工作中往往存在跨域的问题 ,跨域是什么概念就不在这里了,搜这类问题的肯定已经知道了.下面直接探讨jsonp跨域原理 jspon跨域原理: 1.动态创建一个script标签 var script = ...

  7. jQuery 调用jsonp实现与原理

    jQuery 调用jsonp实现与原理 您的评价:        收藏该经验     阅读目录 1.客户端代码 2.服务器端 通过jQuery实现JSONP 一般的ajax是不能跨域请求的,因此需要使 ...

  8. jsonp跨域原理

    Jsonp原理: 首先在客户端注册一个callback (如:'jsoncallback'), 然后把callback的名字(如:jsonp1236827957501)传给服务器.注意:服务端得到ca ...

  9. jsonp 跨域原理详解

    JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略).这一策略对于Java ...

随机推荐

  1. 13.KVM安装之网桥

    安装必须的几个库和软件(最好下载一个163的yum源,速度快点) $ yum -y install kvm python-virtinst libvirt tunctl bridge-utils vi ...

  2. 转:C语言 可变参数

    C语言 可变参数 堆栈一般是怎么压栈处理的 /* * stack space: * *        参数3   |    up *        参数2   | *        参数1   v   ...

  3. Html_Img元素 设置图片与其他元素横排高度一致

    <img id="numAdd" src="~/Images/jia.jpg" style="width:30px;height:30px;ve ...

  4. nginx反向代理实现跨域请求

    nginx反向代理实现跨域请求 跨域请求可以通过JSONP实现,缺点是需要修改被请求的服务器端代码进行配合,稍显麻烦通过在自己服务器上配置nginx的反向代理,可以轻松实现跨域请求 思路 示例服务器A ...

  5. json 后台传前台

    jsonObject需实例化new.jsonObject=new JSONObject();jsonObject.put("goodslist", list);jsonObject ...

  6. swig之于c++

    [namespace] namespace nsTest1 { int nsAdd(int a, int b) { return a + b; } } namespace nsTest2 { int ...

  7. CSS3 transform对普通元素的N多渲染影响

    一.一入transform深似海 一个普普通通的元素,如果应用了CSS3 transform变换,即便这个transform属性值不会改变其任何表面的变化(如scale(1), translate(0 ...

  8. 在eclipse中导入weka(小白在路上)

    第一步:新建一个java工程,new->javaproject,假设工程名为wekatest 第二步:导入weka.jar 第三步:src关联 导入后有许多的.class文件,直接双击打开是看不 ...

  9. DeviceIoControl

    DeviceIoControl是kernel32中的函数,包含的头文件为winbase.h. BOOL DeviceIoControl( HANDLE hDevice,                 ...

  10. shopex最新版前台一处想不到的SQL注入漏洞

    shopex代码核心的地方都做了加密处理,找漏洞就需要一点想象空间了,比如这个SQL注入… 存在于用户注册(想不到的位置吧?)   /core/shop/controller/ctl.passport ...