我的jsonp解决跨域请求

我的jsonp解决跨域请求

原理

1.jsonp是一个非官方的跨域解决方案,只支持get请求。
2.jsonp解决跨域请求,是利用script标签的跨域能力来发送请求的,使服务器返回js代码,或函数调用,以实现跨域。
客户端代码
在客户端定义一个函数,通过script标签向服务端发送请求,在服务端把函数的调用返回,客户端解决函数的调用。

<body>
    用户名:<input type="text" id='username'>
    <p></p>
    <script>
        // 获取input元素
        const input = document.querySelector('input');
        const p = document.querySelector('p');

        // 声明handle函数
        function handle(data) {
            input.style.border = 'solid 1px #f00';
            // 修改p标签的文本内容
            p.innerHTML = data.msg;
        }
        // 绑定事件
        input.onblur = function() {
            // 获取用户的输入值
            let username = this.value;
            // 向服务端发送请求 检测用户名是否存在
            // 1.创建script标签
            const script = document.createElement('script');
            // 2.设置标签的src属性
            script.src = 'http://127.0.0.1:3000/check-username';
            // 将这个script插到文档中
            document.body.appendChild(script);
        }
    </script>
</body>

服务器端代码

// 检测用户名是否存在
app.all('/check-username', (request, response) => {
  const data = {
    exsit: 1,
    msg: '用户名已经存在'
  }
  let str = JSON.stringify(data);
  response.send(`handle(${str})`);
})

jQuery发送请求

http://127.0.0.1:3000/jquery-jsonp-server?callback=?
**callback=?**的值必须是?
客户端

<body>
    <button>点击发送 jsonp 请求</button>
    <div id='result'></div>
    <script>
        $('button').eq(0).click(function() {
            $.getJSON('http://127.0.0.1:3000/jquery-jsonp-server?callback=?', function(data) {
                $('#result').html(`
                        名称:${data.name}</br>
                        房产地址:${data.city}
                `)
            })
        })
    </script>
</body>

服务器端

app.all('/jquery-jsonp-server', (request, response) => {
  const data = {
    name: 'xf',
    city: ['北京', '西安', '上海', '深圳']
  }
  let str = JSON.stringify(data);
  // 接收callback参数
  let cb = request.query.callback;
  // 返回结果
  response.send(`${cb}(${str})`);
})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值