js跨域请求问题

通过动态插入<script>到页面,src的地址里包含返回执行函数callback参数,请求的页面操作函数并带有数据callback(data)


<html>

<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>js跨域请求问题</title>
    <meta content="IE=7" http-equiv="x-ua-compatible" />
</head>
<body>
    <!-- main -->
    <div id="main">
        <input type="button" οnclick="get()" class="apibtn" value="查看结果" />
    </div>
    <div id="result" style="word-break: break-all;">
    </div>
    <script type="text/javascript">
        var fn = {};
        function load_script(xyUrl, callback) {
            var head = document.getElementsByTagName('head')[0];
            var script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = xyUrl;
            //借鉴了jQuery的script跨域方法
            script.onload = script.onreadystatechange = function () {
                if ((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
                    callback && callback();
                    // Handle memory leak in IE
                    script.onload = script.onreadystatechange = null;
                    if (head && script.parentNode) {
                        head.removeChild(script);
                    }
                }
            };
            // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
            head.insertBefore(script, head.firstChild);
        }
        function get() {
            //debugger;
            var callbackName = 'cbk_' + Math.round(Math.random() * 10000);    //随机函数名
            var xyUrl = "http://localhost/api/get_cate_nums.php?cityid=2419&callback=fn." + callbackName;
            //动态创建script标签
            load_script(xyUrl);
            fn[callbackName] = function (xyResult) {
                //debugger;
                delete fn[callbackName];    //调用完需要删除改函数
                callback && callback(xyResult);
            }
        }
        function callback(xyResult) {
            document.getElementById("result").innerHTML = "返回结果:" + xyResult;
        }
    </script>
</body>

</html>


对网上的代码做了些修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值