web跨域请求——JSONP

本文介绍了web跨域请求时遇到的问题及其解决方案——JSONP。通过使用<script>标签,JSONP绕过同源策略,将JSON数据包装在函数调用中返回,从而实现数据的获取。在JSONP过程中,浏览器向服务器发送请求,服务器返回包装后的JSON数据,这个数据会被预定义的回调函数执行。需要注意的是,JSONP的安全性较低,可能会执行恶意代码,因此选择可信的web服务非常重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTML代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Mighty Gumball(JSON)</title>
        <script src="gumball.js"></script>

    </head>
    <body>
        <h1>Migthy Gumball Sales</h1>
        <div id="sales">

        </div>
        <script src="http://gumball.wickedlysmart.com/?callback=updateSales"></script>
    </body>
</html>

javascript代码:

window.onload = function(){

}
function updateSales(sales){
    var salesDiv = document.getElementById("sales");
    for (var i = 0;i<sales.length;i++) {
        var sale = sales[i];
        var div = document.createElement("div");
        div.setAttribute("class","saleItem");
        div.innerHTML = sale.name+" sold "+sale.sales+" gumballs";
        salesDiv.appendChild(div);
    }
}

    如上图代码,当浏览器想请求http://gumball.wickedlysmart.com中的JSON数据时,就会遇到跨域问题而被阻止访问。

    解决办法是使用JSONP,JSONP是一种使用<script>标记获取JSON对象的方法,他可以避免XMLHttpRequest的同源安全问题。JSONP的全称是JSON with padding,含义是在请求返回的JSON中先用一个函数来包装。

    其工作步骤如下:

1、HTML中包含一个<script>元素,这个script的源是一个web服务的URL,这个web服务将为我们提供JSON数据。

2、当浏览器遇到页面中的<script>元素,会向src中的URL发送一个HTTP请求。

3、服务器正常处理这个请求,发送回JSON数据,不过在发送JSON串之前,会将它包装在一个函数调用中,如updateSales调用。

4、解析和解释JSON响应时,它包装在一个函数调用中,所以会调用这个函数,并把由JSON串创建的对象传入这个函数。

注:web服务器允许指定一个回调函数,也就是自己命名函数。一般Web服务将其命名为callback,可以查看自己的web服务文档,明确web服务实际使用的参数名。

使用<script>加载JavaScript就不再安全了。
如果向一个恶意Web服务器发出一个JSONP请求,响应中可能包含有开发者不需要的JavaScript代码,浏览器会执行这些恶意的代码。所以要谨慎选择所链接的web服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值