美文网首页
跨域JSONP实质与JavaScript实现

跨域JSONP实质与JavaScript实现

作者: 静候那一米阳光 | 来源:发表于2017-11-08 10:12 被阅读0次

跨域JSONP实质与JavaScript实现

实质

利用script标签的src属性(浏览器允许script标签跨域),通过动态创建一个script标签,指定src属性为跨域的api,那么html会把返回的字符创当作javascript代码来进行解析,如果我们在返回的字符串中使用自定义函数形式包装起来,然后在html中调用自定义函数,即可拿到返回的字符串。

jQuery 使用

jQuery.getJSON 官方文档

原生js实现

getJSONP

【实现】

var getJSONP = function(url, callback) {
  //动态生成回调函数名并定义回调函数
  var cbname = 'jsonp' + (new Date()).getTime();
  window[cbname] = function(response) {
    try {
      callback(response); //处理响应 
    } finally {//清理工作
      delete window[cbname];
      script.parentNode.removeChild(script);
    }
  }
  //动态添加script
  var script = document.createElement("script");
  script.src = url + cbname;
  document.body.appendChild(script);
  //请求成功
  script.onload = script.onreadystatechange = function() {
    if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
      alert('Loading successful');
      script.onload = script.onreadystatechange = null;
    }
  }
  //请求失败;IE 低版本不支持onerror,并且在加载失败时执行成功事件。
  script.onerror = function() {
    alert("Loading failed");
  }
}

【使用】

var url = "http://127.0.0.1:9999/jsonp";
getJSONP(url + "?callback=", function(data) {//这里需要跟服务端协调好名字 比如callback或者jsoncallback等等
  alert(data);
});

拓展

如果想全部浏览器兼容的话,在条件允许的情况下可以参考

How to trigger script.onerror in Internet Explorer?--stackoverflow

相关文章

  • 跨域JSONP实质与JavaScript实现

    跨域JSONP实质与JavaScript实现 实质 利用script标签的src属性(浏览器允许script标签跨...

  • js跨域问题

    来源 javascript中实现跨域的方式总结 第一种方式:jsonp请求;jsonp的原理是利用 标签的跨域特性...

  • jsonp

    参考:轻松搞定JSONP跨域请求参考:JavaScript 跨域总结与解决办法要理解跨域,先要了解一下“同源策略”...

  • 珠峰 AJAX --- JSONP跨域

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

  • 浏览器跨域问题,教你手写实现jsonp跨域

    跨域概述为什么会有跨域跨域解决办法:1、jsonp;2、后台代理手写实现jsonp跨域(包括服务器端代码) 跨域问...

  • ajax跨域请求

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

  • JavaScript - GET/POST及跨域方法

    xhr 原生方法请求 window fetch 方法 关于跨域 利用JSONP实现跨域调用 使用 CORS(跨域资...

  • JSON Hijacking

    大概就是利用jsonp跨域请求,来实现csrf攻击。 JSONP存在的JSON Hijacking漏洞以及与csr...

  • js中代理模式

    典型例子 jsonP用过代理,实现跨域交互

  • #hello,JS:15 同源策略 & 跨域(JSONP)

    跨域有几种常见的方式?你有没有跨域使用的经验? 方式: 使用jsonp实现跨域?使用cors实现跨域?浏览器另类的...

网友评论

      本文标题:跨域JSONP实质与JavaScript实现

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