博客
关于我
详解Jsonp跨域
阅读量:281 次
发布时间:2019-03-01

本文共 1363 字,大约阅读时间需要 4 分钟。

JSONP与CORS的对比与应用

JSONP(JSON with Padding)是一种用于跨域数据获取的技术,通过 script 标签实现对外域资源的请求。在传统的 AJAX 中,XMLHttpRequest 对于跨域请求受到 Same Origin Policy 的限制,但 JSONP 提供了一种绕过限制的方式。

JSONP的工作原理

JSONP 的核心思想是利用 script 标签的 src 属性,请求外域服务器返回的 JavaScript 代码。这个脚本包含一个回调函数,用于接收并处理返回的 JSON 数据。例如:

foo({ id: 123, name: '张三' });

当 script 标签加载完成后,回调函数 foo 会被执行,参数中传递 JSON 数据。这种方式无需 XMLHTTPRequest 对象,适用于不支持 AJAX 的旧浏览器。

JSONP在 jQuery 中的应用

在 jQuery 中,使用 JSONP 实现跨域请求有两种主要方法:

  • $.ajax() 中设置 dataType 为 'jsonp'
  • $.ajax({    dataType: 'jsonp',    url: 'http://www.zxx.com/user?name=zxx',    success: function(data) {        // 处理数据    }});
    1. 使用 $.getJSON() 方法
    2. $.getJSON('http://www.zxx.com/user?name=zxx&callback=?', function(data) {    // 处理数据});

      通过这种方式,开发者可以在支持 JSONP 的浏览器中轻松实现跨域数据获取。

      JSONP的优缺点

      优点:

      • 无需 XMLHTTPRequest 对象支持,兼容更广泛的浏览器。
      • 简单易于实现,适合只需 GET 请求的场景。
      • 支持回调函数返回数据,方便处理。

      缺点:

      • 仅支持 GET 请求,无法实现 POST 或其他 HTTP 方法。
      • 数据接收依赖于脚本加载,较难处理错误状态。
      • 安全性较低,可能引入恶意代码。

      CORS 与 JSONP 对比

      CORS(Cross-Origin Resource Sharing,跨域资源共享)是现代浏览器支持的更先进技术,相比 JSONP 有以下优势:

    3. 支持所有 HTTP 方法:CORS 不受限于 GET 请求,可以实现 POST、PUT 等。
    4. 更好的错误处理:CORS 使用标准的 HTTP 状态码和错误事件,处理起来更直观。
    5. 更广泛的浏览器支持:现代浏览器普遍支持 CORS,而 JSONP 的支持较弱。
    6. JSONP 与 JSON 的区别

      JSONP 与 JSON 并非直接关联:

      • JSONP 是一种技术,用于跨域数据获取。
      • JSON 是数据格式,用于数据描述和交换。

      简单来说,JSONP 是一种技巧,用于绕过跨域限制,而 JSON 是数据交换的标准格式。

      总结

      JSONP 是 AJAX 跨域获取的重要方法之一,尽管其优缺点明显,但在特定场景下仍然有用。随着 CORS 技术的普及,未来 JSONP 的应用可能会逐渐减少,但对于旧浏览器的支持和简单场景的需求,它仍然具有重要价值。

    转载地址:http://goko.baihongyu.com/

    你可能感兴趣的文章
    npm ERR! Unexpected end of JSON input while parsing near ‘...“:“^1.2.0“,“vue-html-‘ npm ERR! A comp
    查看>>
    npm error Missing script: “server“npm errornpm error Did you mean this?npm error npm run serve
    查看>>
    npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
    查看>>
    npm install CERT_HAS_EXPIRED解决方法
    查看>>
    npm install digital envelope routines::unsupported解决方法
    查看>>
    npm install 卡着不动的解决方法
    查看>>
    npm install 报错 EEXIST File exists 的解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>
    npm install 报错 Failed to connect to github.com port 443 的解决方法
    查看>>
    npm install 报错 fatal: unable to connect to github.com 的解决方法
    查看>>
    npm install 报错 no such file or directory 的解决方法
    查看>>
    npm install 权限问题
    查看>>
    npm install报错,证书验证失败unable to get local issuer certificate
    查看>>
    npm install无法生成node_modules的解决方法
    查看>>
    npm install的--save和--save-dev使用说明
    查看>>
    npm node pm2相关问题
    查看>>
    npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
    查看>>
    npm run build报Cannot find module错误的解决方法
    查看>>
    npm run build部署到云服务器中的Nginx(图文配置)
    查看>>
    npm run dev 和npm dev、npm run start和npm start、npm run serve和npm serve等的区别
    查看>>