美文网首页
使用 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
});

相关文章

  • 【JavaScript】ajax跨域发送POST

    跨域可以使用jsonp,实现跨域请求,但是这种方式只能发送GET请求,type设置为POST也会自动转为GET,因...

  • JavaScript - GET/POST及跨域方法

    xhr 原生方法请求 window fetch 方法 关于跨域 利用JSONP实现跨域调用 使用 CORS(跨域资...

  • 跨域

    ??JSONP只能解决GET请求跨域,不能解决POST请求跨域问题,XHR2可以解决GET,POST方式的请求跨域...

  • 详解js跨域问题

    跨域失败 当使用jsonp跨域时, 1:请求必须是GET 2:python 写的webservice返回的格式是J...

  • 使用 jsonp 实现 get 跨域请求

    利用标签的 src 可跨域属性,实现 get 跨域请求 代码如下(不依赖于第三方库): var $jsonp = ...

  • jsonp原理与实现

    原理 jsonp的本质是利用script标签的src属性进行跨域请求,只能用于get请求。 前端jquery实现 ...

  • 跨域实战解决方案

    一.跨域方案 1.JSONP跨域 (1)前端发起jQuery ajax 的get请求 $.getJSON...

  • jsonp解决ajax跨域的原理

    1.jsonp只能解决GET类型的ajax请求跨域问题2.jsonp请求不是ajax请求,而是一般的get请求3....

  • 跨域解决方案

    1.使用Jsonp解决跨域(不推荐,因为只支持get请求,不支持post请求) 1.前端AJAX请求dataTyp...

  • 前端跨域请求原理及实践

    一、 跨域请求的含义 2.3 使用 标签原生实现 JSONP 经过上面的事件,你是不是觉得 JSONP 的实现和...

网友评论

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

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