骨刻文字数字化识别10


一、前后端交互

有很多种方式可以发送HTTP请求,如下:

用 form 可以发请求,但是会刷新页面或新开页面;
用 a 可以发 get 请求,但是也会刷新页面或新开页面;
用 img 可以发 get 请求,但是只能以图片的形式展示;
用 link 可以发 get 请求,但是只能以 CSS、favicon 的形式展示;
用 script 可以发 get 请求,但是只能以脚本的形式运行。

JSONP

JSONP即“JSON Padding”,当两个网站(如x.com访问y.com,不同域)之间需要访问,可以通过script作为交互方式,具体过程为:

请求方(x.com前端)定义一个发送请求成功/失败后执行的函数f(回调函数,即使用方提供函数给对方调用);
请求方动态创建script(添加到body),其src指向响应方url(y.com后端),同时将回调函数名作为参数传递,即http://y.com?callback=f;
响应方接收请求,根据查询参数f和返回的数据、构造调用这个函数的JavaScript代码字符串,形如f.call(undefined, data)或f(data)作为响应结果返回给请求方;
请求方浏览器接收响应(一段JS代码),被添加到body就会执行f.call(undefined, data),从而获得需要的数据data。

二、JSONP

JSONP即“JSON Padding”,当两个网站(如x.com访问y.com,不同域)之间需要访问,可以通过script作为交互方式,具体过程为:

请求方(x.com前端)定义一个发送请求成功/失败后执行的函数f(回调函数,即使用方提供函数给对方调用);
请求方动态创建script(添加到body),其src指向响应方url(y.com后端),同时将回调函数名作为参数传递,即http://y.com?callback=f;
响应方接收请求,根据查询参数f和返回的数据、构造调用这个函数的JavaScript代码字符串,形如f.call(undefined, data)或f(data)作为响应结果返回给请求方;
请求方浏览器接收响应(一段JS代码),被添加到body就会执行f.call(undefined, data),从而获得需要的数据data。

<script>
    button.addEventListener(
        'click', (e) => {
            let functionName = 'x' + parseInt(Math.random() * 10000, 10)    
            window[functionName] = function(result) {
                if (result === 'success') {
                    // ...
                }
            }
            let script = document.createElement('script')
            script.src = 'http://y.com/?callback=' + functionName     // 发送请求获取script
            document.body.appendChild(script)   
            script.onload = function(e) {
                e.currentTarget.remove()
                delete window[functionName]
            }
            script.onerror = function(e) {
                e.currentTarget.remove()
                delete window[functionName]
            }
        }
    )
</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值