码迷,mamicode.com
首页 > Web开发 > 详细

令人发指的js运行速度

时间:2015-06-09 13:14:15      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

先上一段代码

var jsonp = function (url, func, type) {
    var callback = "jsonpCallback_" + new Date().getTime() ,
        url = url + (url.indexOf( ‘?‘ ) + 1 ? ‘&‘ : ‘?‘) + ‘callback=‘ + callback,
        s = creatElement("script", {"src": url});
    //console.log(callback,"callback")
    window[callback] = function (data) {
        func(data, type);
    };
    document.body.appendChild(s);
}

这是一段jsonp请求的函数,其中type是工作中需要,请忽略。用着感觉是没问题的,但是实际却遇到了一个bug。

bug产生过程

    jsonp(url1, ajaxHandle, "xxx");
    jsonp(url2, ajaxHandle, "xxxx");

当我连着写调用jsonp函数的时候看着貌似也没啥问题,
jsonp里会根据时间戳生成两个不同的全局

jsonpCallback_date1(),
jsonpCallback_date2()

时间戳函数。
但是这里居然可能会返回一样的时间戳。。。也就是说第二个url2请求函数会把第一个请求函数给覆盖了。导致第一个url1无法正常解析。
这也就是说,js几乎在同时调用了这两个jsonp函数。。。

 

解决办法,新增一个随机数,如果随机数也能再次惊人的重合,只能呵呵了。

var jsonp = function (url, func, type) {
    var callback = "jsonpCallback_" + new Date().getTime() + Math.floor(Math.random() * 1000000),
        url = url + (url.indexOf( ‘?‘ ) + 1 ? ‘&‘ : ‘?‘) + ‘callback=‘ + callback,
        s = creatElement("script", {"src": url});
    //console.log(callback,"callback")
    window[callback] = function (data) {
        func(data, type);
    };
    document.body.appendChild(s);
}

 

令人发指的js运行速度

标签:

原文地址:http://www.cnblogs.com/childsplay/p/4562932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!