美文网首页我爱编程
跨域系列之(二)

跨域系列之(二)

作者: 罗茂琛 | 来源:发表于2018-03-22 10:33 被阅读0次

二、JSNONP
JSONP的原理是什么呢?我们来看看大神贺师俊的解释:

很简单,就是利用<script>标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。 第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。

找一篇大神写的详细易懂的文章
以下是菜鸟教程的案例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP 实例</title>
</head>
<body>
    <div id="divCustomers"></div>
    <script type="text/javascript">
function callbackFunction(result, methodName)
        {
            var html = '<ul>';
            for(var i = 0; i < result.length; i++)
            {
                html += '<li>' + result[i] + '</li>';
            }
            html += '</ul>';
            document.getElementById('divCustomers').innerHTML = html;
        }
</script>
<script type="text/javascript" src="http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction"></script>
</body>

后端代码

<?php
header('Content-type: application/json');
//获取回调函数名
$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);
//json数据
$json_data = '["customername1","customername2"]';
//输出jsonp格式的数据
echo $jsoncallback . "(" . $json_data . ")";
?>

JSONP总结:
JSONP是为了传数据而存在的技术。网页之间的通信原本有AJAX就够了,而AJAX因为浏览器“同源策略”面对跨域情况就束手无策了。JSONP就这样被发明了,利用<script>的src属性不受“同源策略”的控制,“作弊”般地巧妙地逃过了浏览器的这一限制。

JSONP方法本质是创建<script>标签,其src指向我们的数据地址。地址后面附带一个回调函数(名字一般是callback或者是别的什么,就看后台给我们的是什么了,函数名是我们起的)。然后,声明这个回调函数。这样,只要一引入上面的<script>标签,就相当于执行了那个回调函数。

虽然jQuery把JSONP内置在了AJAX里,但是我们一定要清楚,AJAX和JSONP是完全不一样的,一定不要混淆!

相关文章

  • 跨域系列之(二)

    二、JSNONPJSONP的原理是什么呢?我们来看看大神贺师俊的解释: 很简单,就是利用 标签没有跨域限制的“漏洞...

  • SpringBoot2.x整合CORS解决跨域问题

    跨域问题系列文章 1. 同源策略与CORS(跨域请求的起源)2. SpringBoot2.x整合CORS解决跨域问...

  • API-Server构建指南(4)-跨域

    跨域的前世今生系列。核心: 跨域是浏览器的安全策略跨域的具体规则 可参考https://blog.csdn.net...

  • 跨域系列之(一)

    最近或多或少经常看到跨域操作,自己也没有有个时间去专门研究透彻这一块,所以打算借此机会,好好研究一番,并为此写几篇...

  • 跨域小结 - 跨域系列

    总结前端开发者遇到的跨域问题,大部分是在开发的过程中。由于此时项目是在本地运行,还没有进行正式发布。 本地域名下,...

  • 跨域(Cross-Domain)之痛(二)

    第二波兼容IE8(IE9同)的工作,搞了半天,又是跨域导致 跨域(Cross-Domain)之痛 bootstra...

  • 2021-02-23

    一、什么是跨域 二、vue.config.js 跨域配置

  • Js请求跨域问题

    一、请求跨域问题概述 跨域:指的是协议名、端口或者域名不一致的情况都是跨域。 二、跨域问题的解决方案 1、同域代理...

  • 关于跨域以及解决思路

    本章内容目录:一、跨域相关概念的理解二、跨域产生的原因三、跨域的几种解决方案 一、跨域相关概念的理解 首先先了解以...

  • 9.CORS

    cors是浏览器跨域的一种规范,规定的跨域方案:通过一系列http请求头去控制跨域行为。 将请求分为两类:简单请求...

网友评论

    本文标题:跨域系列之(二)

    本文链接:https://www.haomeiwen.com/subject/ksgoqftx.html