美文网首页
使用 jsonp 实现 get 跨域请求

使用 jsonp 实现 get 跨域请求

作者: Rose_yang | 来源:发表于2019-08-15 16:18 被阅读0次

    利用标签的 src 可跨域属性,实现 get 跨域请求

    代码如下(不依赖于第三方库):

    var $jsonp = (function () {
    var that = {};

    that.send = function (src, options) {
        var callback_name = options.callbackName || 'callback',
            on_success = options.onSuccess || function () {},
            on_timeout = options.onTimeout || function () {},
            timeout = options.timeout || 10; //sec
    
        var id = 'script_' + new Date().getTime(),
            element;
    
        // 返回数据后,删除新创建的 script 元素
        var removeScript = function () {
            element = document.getElementById(script.id);
            if (element) {
                element.parentNode.removeChild(element);
            }
        };
    
        var timeout_trigger = window.setTimeout(function () {
            window[callback_name] = function () {};
            on_timeout();
            removeScript();
        }, timeout * 1000);
    
        window[callback_name] = function (data) {
            window.clearTimeout(timeout_trigger);
            on_success(data);
            removeScript();
        };
    
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.async = true;
        script.src = src;
        script.id = id;
    
        document.getElementsByTagName('head')[0].appendChild(script);
    };
    
    return that;
    

    })();

    后台处理
    Node express
    router.get('/url', function(req, res) {
    return res.jsonp({status: 'jsonp'});
    });
    以上效果等同于

    router.get('/url', function(req, res) {
    return res.send('typeof callback === "function"&&callback(' + JSON.stringify({status: 'jsonp'}) + ')');
    });

    其他服务器处理,可以参考以上。

    调用方式

    $jsonp.send('http://IP?params=&callback=handleDiff', {
    callbackName: 'handleDiff', // 此处不写,默认的回掉函数名称为 callback
    onSuccess: function (response) {
    console.log('success!',response);
    },
    onTimeout: function () {
    console.log('timeout!');
    },
    timeout: 5
    });

    相关文章

      网友评论

          本文标题:使用 jsonp 实现 get 跨域请求

          本文链接:https://www.haomeiwen.com/subject/lxdmkxtx.html