jsonp跨域的src回调函数为什么要随机

其实不是要随机,而是要唯一性。因为 JSONP 的回调实际上是创建了一个临时的函数供加载的 js 调用。如果不唯一的话,同时发出多个 JSONP 请求,前面的函数就会被覆盖掉,后面的方法就没法执行了。
如果你能确保页面中不会同时出现多个请求, 也没Jsonp请求的响应体通常为 callback(dataObject),callback即回调函数名。为保证Jsonp正常运作,在发出请求之前需要在window对象上放置回调函数。假设回调函数不是随机的,那在连续JSONP请求时,后发出的请求放置的回调函数会覆盖掉之前的,回调数据会出问题所谓。

<script>
    //调用百度jsonp 模拟百度搜索
    // https://www.baidu.com/sugrec?prod=pc&wd=H5&cb=callback
    // wd=H5    关键词
    // cb       回调函数名

    var searchCon = document.getElementsByClassName("searchCon")[0];
    var list = document.getElementsByClassName("list")[0];
    // function callback(result) {
    //     console.log(result);
    // }
    searchCon.oninput = function () {
        var search = this.value;
        var callbackName = "JSONP_" + Math.random().toString().replace(".", "");
        var script = document.createElement("script");
        script.src = `https://www.baidu.com/sugrec?prod=pc&wd=${search}&cb=${callbackName}`;
        //给全局的window上定义一个function
        window[callbackName] = function(result){
            // if(datalist.)
            var datalist = result.g;
            // console.log(result);
            if(datalist)
            {
                var html = "";
                datalist.forEach(item => {
                    var data = item.q;
                    html += ` <li><a href="">${data}</a></li>`;
                });
                list.style.display = "block";
                list.innerHTML = html;
            }else{
                list.style.display = "none";
            }
            script.remove();
        }
        document.body.appendChild(script);
    }

</script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值