美文网首页
Ajax跨域 —— Jsonp

Ajax跨域 —— Jsonp

作者: heheheyuanqing | 来源:发表于2017-12-01 10:11 被阅读13次

同源策略

  • 同源/同域即域名、协议、端口号相同

JSONP(JSON with Padding)

是一种跨域请求方式

  • 主要原理:script标签具有跨域请求的特性,由src属性发送请求到服务器,服务器返回Javascript代码
  • 组成:
    • 回调函数:回调函数作为参数发往服务器,当服务器响应时,服务器把函数和数据拼成字符串返回
    • 数据
  • 请求过程:
    • 请求阶段:浏览器创建一个script标签,并给其src赋值
    • 发送请求:给src赋值时则发送请求
    • 数据响应:服务器将要返回的数据作为参数和函数名称拼接在一起返回
  • 封装:
function jsonp(params) {
    var options = params || {};
    var ohead = document.getElementsByTagName("head")[0];
    var oscript = document.createElement("script");
    var url = params.url || "";
    var callback = ("jsonp_" + Math.random()).replace(".","");
    var json = callback;

    url = url +"?appkey="+options.appkey+"&zipcode="+options.zipcode+"&callback="+callback;

    //发送请求
    oscript.src = url;
    ohead.appendChild(oscript);

    //创建回调函数
    window[callback] = function (json) {
        ohead.removeChild(oscript);
        clearTimeout(oscript.timer);
        window[callback] = null;
        options.success&&options.success(json);
    };

    //设置超时
    if (options.time){
        oscript.timer = setTimeout(function () {
            window[callback]=null;
            ohead.removeChild(oscript);
            options.erro&&options.erro({
                message:"连接超时"
            })
        },options.time);
    }

}

调用:

 jsonp({
                url: "http://api.jisuapi.com/zipcode/query",
                appkey: "d06f93228c91fe10",
                zipcode: zipcode,
                time:10000,
                success:function (data) {
                    oresult.innerHTML = zipcode + "是"+data.result[0].province+"省"+data.result[0].city+"市"+data.result[0].town+"\n"+
                        data.result[0].address+"\n"+data.result[1].address+"\n"+data.result[2].address+"\n"+data.result[3].address+"\n"+data.result[4].address;
                },
                erro:function (err) {
                    alert(err.message);
                }
            });

相关文章

  • 解决ajax跨域问题

    Jsonp解决ajax跨域问题 CORS解决ajax跨域问题

  • ajax跨域请求

    ajax跨域请求(jsonp) 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案JSONP jQue...

  • 交互那些事(二)

    说完ajax我想必须说说jsonp了,谈到jsonp就必须先说说跨域,首先ajax是不能跨域的,除非后台允许跨域或...

  • 珠峰 AJAX --- JSONP跨域

    珠峰 AJAX --- JSONP跨域AJAX(异步 javascript and XMLHTTPReq...

  • 复习jsonp和promise

    一.jsonp 1.jsonp是跨域访问api,ajax不能跨域 2.在vue中使用jsonp首先要安装jsonp...

  • jQuery笔记

    Ajax跨域访问 dataType设置为"jsonp" jsonp设置为"jsonpCallback"该参数是用于...

  • 跨域实战解决方案

    一.跨域方案 1.JSONP跨域 (1)前端发起jQuery ajax 的get请求 $.getJSON...

  • 跨域上传图片并预览

    跨域上传文件 之前解决跨域问题都是使用的JQuery的JSONP类型的Ajax请求,JSONP原理是让服务器把数据...

  • 实用程序库

    解决ajax跨域方法: jsonp 服务器代理 跨域资源共享 一、moment momentjs官网[https:...

  • 4种方法解决js跨域的实现方式

    一、JSONP 使用ajax实现跨域: 二、CORS跨域资源共享 三、Nginx反向代理 四、webpack (在...

网友评论

      本文标题:Ajax跨域 —— Jsonp

      本文链接:https://www.haomeiwen.com/subject/xaribxtx.html