您好,欢迎来到懂意情感。
搜索
您的当前位置:首页JavaScript中模拟实现jsonp_javascript技巧

JavaScript中模拟实现jsonp_javascript技巧

来源:懂意情感


function prescript(s) {
 if (s.cache === undefined) {
 s.cache = false;
 }
 if (s.crossDomain) {
 s.type = "GET";
 }
 }


 function prejsonp(s, originalSettings, jqXHR) {
 // 给回调函数命名
 var callbackName = s.jsonpCallback
 s.url += (/(?:)/.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
 // 脚本执行后使用数据转换器来检索json
 // 提供给代码获取服务器的是据
 s.getData = function() {
 if (!responseContainer) {
 jQuery.error(callbackName + " was not called");
 }
 return responseContainer[0];
 };
 //修改处理机制
 s.dataTypes[0] = "json";
 // 创建一个全局函数
 overwritten = window[callbackName];
 //用来收集服务器给的数据
 window[callbackName] = function() {
 responseContainer = arguments;
 };

 return "script";
 }

 /**
 * jsonp的预先处理
 */
 function inspectPrefiltersOrTransportsA(options, originalOptions, jqXHR) {
 //预处理jsonp
 var dataTypeOrTransport = prejsonp(options, originalOptions, jqXHR)
 //扩充dataTypes
 options.dataTypes.unshift(dataTypeOrTransport);
 //预处理script类型
 prescript(options)
 }


 /**
 * 分发器
 * @return {[type]} [description]
 */
 function inspectPrefiltersOrTransportsB(s, originalOptions, jqXHR) {
 return {
 send: function(_, complete) {
 var script = jQuery("").prop({
 async: true,
 charset: s.scriptCharset,
 src: s.url
 }).on(
 "load error",
 callback = function(evt) {
 script.remove();
 callback = null;
 if (evt) {
 complete()
 }
 }
 );
 //

Copyright © 2019- doiov.com 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务