原生封装Jsonp

大家好!我们又见面了,昨天我们讲了一下jQuery的表单验证插件,今天我们来说一下Jsonp.

我们平常做的页面大部分的数据其实都是从后台获取过来的,最常用的方法就是Ajax,但是Ajax不能跨域取数据,这时我们就要用到Jsonp,那么什么是Jsonp?

jsonp原理:

就是利用<script>标签没有跨域的"漏洞"来达到与第三方通讯的目的,当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方API地址,并提供一个回调函数来接受数据,第三方产生为Json数据的包装,这样浏览器会调用callback()函数,并传递解析后的Json对象作为参数,本站脚本可在callback()函数里处理传入的数据.

具体代码如下:

function jsonp(json){  //封装一个函数,方便以后使用,   参数传入一个json对象
  if(!json.url){       //考虑默认的情况
    alert("请输入地址");
    return;
  }
  json.data = json.data || {};  //都要考虑默认情况
  json.cbName = json.cbName || "";

  var fnName="show"+Math.random();//为了不使每个函数名一样,给函数名加随机数,避免了一些不必要的麻烦,
  fnName=fnName.replace(".","");//随机数会有小数点,函数名不能有小数点,替换掉

  window[fnName]=function(json1){//因为动态添加的script标签,每次调用都会创建一堆的script标签,页面加载的时候先清除一下
    json.success && json.success(json1);//判断用户有没有传入success方法有就执行
    head.removeChild(script);
  };

  json.data[json.cbName]=fnName;
  var arr=[];//创建一个空数组,把用户传入的值放进去
  for(var name in json.data){
    arr.push(name + "=" + json.data[name]);
    console.log(arr);
  };

  var script=document.createElement("script");

  //网址的格式是地址+?+&(中间是数据)
  script.src= json.url + "?" + arr.join("&");
  var head=document.getElementsByTagName("head")[0];
  head.appendChild(script);
}

剩下的在页面使用这个方法就好了,相信你们都会用的,再见了!

时间: 2024-10-05 21:29:04

原生封装Jsonp的相关文章

原生封装的ajax

原生封装的ajax的代码如下: //将数据转换成 a=1&b=2格式; function json2url(json){ var arr = []; //加随机数防止缓存; json.t = Math.random(); for(var name in json){ arr.push(name+'='+json[name]); } return arr.join('&'); } function ajax(json){ //1.创建一个ajax对象; if(window.XMLHttpRe

封装 jsonp请求数据的方法

什么是jsonp :  Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据. 为什么我们从不同的域(网站)访问数据需要一个特殊的技术( JSONP )呢?这是因为同源策略. 同源策略,它是由 Netscape 提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略. 了解一下jsonp的api :  封装jsonp的方法: //jsonp.js文件 import or

AJAX-js原生封装

js原生中,ajax交互繁琐复杂,很容易就写错了.因此封装了一个跟jq差不多的函数,从此再也不用担心ajax写错了,简直神清气爽. //封装的方法 function AJAX(obj){ //做网络请求的时候,参数以"对象"的形式传递进来 //规定: obj 里面包含属性: //1.url //2.type -- get 还是 post //3.data -- 前端给后端传递的参数(前端传递的时候,以"对象"的形式) //4.回调函数 -- success //5.

封装JSONP

昨天咱们说了封装ajax,今天咱们说一下 自己创建一个建议的node服务器: 话不多说直接上代码: var http = require('http') //对URL 解析为对象//1.导入模块 URl模块 var url = require('url') var fs = require('fs') var path = require('path') var mime = require('./mime.js') var qs = require('querystring') http.cr

各种封装——封装jsonp

jsonp主要用于跨域进行数据的交互 // JavaScript Documentfunction json2url(json){    json.t=Math.random();    var arr=[];    for(var name in json)    {        arr.push(name+'='+json[name]);    }    return arr.join('&');}function jsonp(json){    json=json||{};    if(

原生封装ajax

01.声明一个全局变量 02.开始封装,判断参数 03.属性的var自定义 04.请求 01.请求行 02.请求头 03.请求发送 05.响应 01.事件监听onreadystatechange 02.通讯完成 03.响应成功 04.获取响应数据 05.判断支付串中是否包含需要的字符 06.响应成败

javascript - 封装jsonp

jsonp牵扯到同源策略.跨域等问题,这里不细说了. 实现就是创建动态的script标签来请求后台地址: 示例: jsonp('xxx.php', { uid: 1 }, function (res) { console.log(res) }) 实例: jsonp('http://localhost/server.php', { uid: 1 }, function (res) { console.log(res) }) 1 function jsonp (url, params, callba

原生封装一个类似于JQ的ajax方法

function $ajax(json){ //初始化参数 if(!json){ return; } json.type = json.type || 'GET'; json.url = json.url || ""; json.async = json.async || true; json.data = json.data || {}; json.succeed = json.succeed || function(){} if(json.dataType=="jsonp

js原生封装自定义滚动条

1 /* 2 * @Author: dothin前端 3 * @Date: 2015-11-21 00:12:15 4 * @Last Modified by: dothin前端 5 * @Last Modified time: 2015-11-21 00:29:12 6 */ 7 ! function() { 8 var EventUtil = { 9 addHandler: function(obj, type, handler) { 10 if (obj.addEventListener)