用原生js 实现 Vue axios AJAX 跨域调用 jsonp

news/2024/7/10 0:46:29 标签: vue

Vue axios 本身是不支持调用 jsonp 的,我在不添加第三方js框架(如jQuery)的前提下,实现 axios 跨域调用 jsonp

完整代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Vue.js Ajax(axios)</title>
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    <script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
</head>

<body>
    <div id="app">
        <table border="1">
            <tr>
                <th>编号</th>
                <th>姓名</th>
            </tr>
            <tr v-for="people in peoples">
                <td>{{people.id}}</td>
                <td>{{people.name}}</td>
            </tr>
        </table>
    </div>
    <script>
        var vv = new Vue({
            el: "#app",
            data: {
                peoples: [],
            },
            created: function () {
                this.bind();
            },
            methods: {
                bind: function () {
                    js_ajax({
                        url: "http://djk8888.byethost32.com/VueAjax/jsonp.html",  // 请求地址
                        jsonp: "callback", // 采用jsonp请求,且回调函数名为"jsonpCallbak",可以设置为合法的字符串    
                        data: {},  // 传输数据
                        success: function (data) {  // 请求成功的回调函数         
                            for (var index in data) {
                                var sth = { id: data[index].id, name: data[index].name };
                                vv.peoples.push(sth);
                            }
                        },
                        error: function (error) { }  // 请求失败的回调函数
                    });
                },
            },
        });
        //原生javascript的ajax调用jsonp
        function js_ajax(params) {
            params = params || {};
            params.data = params.data || {};
            var json = params.jsonp ? jsonp(params) : json(params);
            // jsonp请求  
            function jsonp(params) {
                //创建script标签并加入到页面中  
                var callbackName = params.jsonp || params.jsonpCallback;
                var head = document.getElementsByTagName('head')[0];
                // 设置传递给后台的回调参数名  
                params.data['callback'] = callbackName;
                var data = formatParams(params.data);
                var script = document.createElement('script');
                head.appendChild(script);
                //创建jsonp回调函数  
                window[callbackName] = function (json) {
                    head.removeChild(script);
                    clearTimeout(script.timer);
                    window[callbackName] = null;
                    params.success && params.success(json);
                };
                //发送请求  
                script.src = params.url + '?' + data;
                //为了得知此次请求是否成功,设置超时处理  
                if (params.time) {
                    script.timer = setTimeout(function () {
                        window[callbackName] = null;
                        head.removeChild(script);
                        params.error && params.error({
                            message: '超时'
                        });
                    }, time);
                }
            };
            //格式化参数  
            function formatParams(data) {
                var arr = [];
                for (var name in data) {
                    arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));
                };
                // 添加一个随机数,防止缓存  
                arr.push('v=' + random());
                return arr.join('&');
            }
            // 获取随机数  
            function random() {
                return Math.floor(Math.random() * 10000 + 500);
            }
        }
    </script>
</body>

</html>

预览地址:http://djk8888.byethost32.com/VueAjaxJsonP/axios.html

当然, js_ajax ,formatParams,random 这3个函数写在一个 ajax.js的文件里,引用一下js文件也能使用,页面看上去还简洁一些。


http://www.niftyadmin.cn/n/836587.html

相关文章

linux里jre环境搭建,linux中安装jdk1.8及环境变量的配置

准备工具xftp:用来上传JDK压缩包 以及后边直接更改profile文件配置1.jdk1.8.0_144下载链接&#xff1a;https://pan.baidu.com/s/1DYgIqhRZIPj569brLfUVfA提取码&#xff1a;ivpy2.创建目录2.1在根目录下创建/usr/data/javamkdir /usr/data/java2.2用xftp连接虚拟机2.3上传压缩…

杂题 洛谷P2018 消息传递

题目描述 巴蜀国的社会等级森严&#xff0c;除了国王之外&#xff0c;每个人均有且只有一个直接上级&#xff0c;当然国王没有上级。如果A是B的上级&#xff0c;B是C的上级&#xff0c;那么A就是C的上级。绝对不会出现这样的关系&#xff1a;A是B的上级&#xff0c;B也是A的上级…

Vue.js AJAX 跨域调用 JSONP | jQuery | vue-resource | axios

Vue.js AJAX 跨域调用 JSONP 预览地址&#xff1a;http://djk8888.byethost32.com/VueAjaxJsonP/index.html jQuery&#xff1a; <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Content-Type&quo…

linux 常用命令top、awk、sed等

1、watch命令 &#xff1a;周期性的执行下个程序&#xff0c;并全屏显示执行的结果 -n&#xff1a;指定周期秒数 -d&#xff1a;高亮显示变动过的地方 -t&#xff1a;关闭watch 命令在顶部的时间间隔命令显示 示例&#xff1a; watch -n 1 -d netstat -ant watch -n 1 -d pstr…

bcdedit添加linux引导,利用Bcdedit创建Linux系统引导

Bcdedit在Windows Vista中的一个命令行工具,用于建立和重新配置bootloader,无须再使用boot.ini文件.下面我们来谈谈如何用bcdedit引导Linux.1、概述之前xp时代可通过修改系统分区下(c:)的隐藏系统文件boot.ini来引导其他系统vista时代使用了全新的引导方式,因此配置不同&#x…

如何下载B站(bilibili)的视频

方法一&#xff0c;在bilibili后面添加jj&#xff1a; 如链接&#xff1a;https://www.bilibili.com/video/BV1kA411q7yB?spm_id_from333.851.b_7265706f7274466972737432.5 添加jj后&#xff1a;https://www.bilibilijj.com/video/BV1kA411q7yB?spm_id_from333.851.b_7265…

纯Vue.js 写的一个 自动轮播 Banner 图片广告 的小模块 练练手

自己写着玩 练手用的...(&#xff03;Д)... 在线预览地址&#xff1a;http://djk8888.byethost32.com/banner/banner_vue.html &#xff08;国外服务器 图片加载速度忒慢 ...("▔□▔)...等30秒...&#xff09; HTML页面&#xff1a; <!DOCTYPE html> <html…

linux服务器开机提示f1,linux服务器出现严重故障后的原因以及解决方法

2013-11-27 15:17 狂师阅读(303)评论(0) 编辑 收藏1、把系统安装光盘插入&#xff0c;重启机器&#xff0c;启动时迅速按下Del键&#xff0c;进入CMOS,把启动顺序改为光盘先启动&#xff0c;这样就启动了Linux安装程序&#xff0c;按F5,按提示打入Linux rescue回车&#xff0c;…