javascript - 原生js封装jsonp函数
问题描述
怎么才可以让返回成功的函数:success写到它的参数内部,
function success(data){ console.log(data);}jsonp({ url:’https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su’, type:’get’, data:{wd:’jsonp’ }, callback :’cb’, success:success});function jsonp(options){ var url = options.url; var data = options.data; format(data,options,function(str,callback){var oBody = document.getElementsByTagName(’body’)[0];var oScript = document.createElement(’script’);oScript.setAttribute(’src’,url+’?’+str + options.callback+’=’+callback);oBody.appendChild(oScript); }); return options.success;};function format(data,options,callback){ var callbackName = ’’; var str = ’’; for(var p in data){//格式化get提交的参数str += p+’=’+data[p]+’&’; } for(var p in options){if(options[p] == options.success){//取出要返回的函数名 callbackName = p; callback && callback(str,callbackName);} }}如果是这么写success:function(data){conosle.log(data);}会报一个success is undefined错误
问题解答
回答1:https://jsfiddle.net/hsfzxjy/...
jsonp({ url: ’https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su’, type: ’get’, data:{wd: ’jsonp’ }, callback: ’cb’, success: function (data) { console.log(data) }});function jsonp (options) { let url = options.url let data = options.datalet oBody = document.getElementsByTagName(’body’)[0] let oScript = document.createElement(’script’)let callbackName = ’cb’ + (~~(Math.random()*0xffffff)).toString(16) window[callbackName] = function (result) {options.success(result) } data[options.callback] = callbackNameoScript.setAttribute(’src’, url + ’?’ + format(data)) oBody.append(oScript)}function format(data) { let str = ’’ for (var p in data) {str += encodeURIComponent(p) + ’=’ + encodeURIComponent(data[p]) + ’&’ } return str}
相关文章:
1. 一个走错路的23岁傻小子的提问2. c++ - win764位环境下,我用GCC为什么指针占8个字节,而long是4个字节?3. angular.js - angularjs 使用鼠标悬停时,标签一直闪4. html5 - HTML代码中的文字乱码是怎么回事?5. javascript - SuperSlide.js火狐不兼容怎么回事呢6. android - 安卓activity无法填充屏幕7. python - django 里自定义的 login 方法,如何使用 login_required()8. node.js - 函数getByName()中如何使得co执行完后才return9. python 计算两个时间相差的分钟数,超过一天时计算不对10. java - 安卓电视盒子取得了root权限但是不能安装第三方应用,请问该怎么办?
