• ajax跨域jsonp —— javascript


    目录

    jsonp是什么

    jsonp作用:解决跨域问题

    为什么有跨域问题?

    “同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。

    这是一个用于隔离潜在恶意文件的重要安全机制。”

    同源:相同协议,域名,端口号。

    所以当ajax请求的地址,存在协议,域名,端口号不同时,则存在跨域问题,浏览器会报错。

    jsonp时解决跨域的其中一种方法。

    缺点:只支持GET请求而不支持POST等其它类型的HTTP请求

    jsonp原理

    • ajax 请求无法访问不同源的地址
    • jsonp 不是一种新技术,可以说是一种小技巧,换种方式请求
    • 首先,script 标签可以引入不同源的地址,这样不会报错
    • 此时,如果 script 标签引入需要调用的后台数据接口,就可以拿到数据了,但是没有直接这么简单
    • 先定义获取数据成功后的操作函数,如下面的 success 函数
    • 使用 script 标签,引入需要调用的后台数据接口,参数必须附带,获取数据成功后的操作函数success

    原生js使用jsonp

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <h3>控制台</h3>
        <script type="text/javascript">
            function success(data){
                console.log('数据:', data);
                // 之后对数据的处理
            }
        </script>
        <script src="http://localhost/aa.php?callback=success&param1=val1"></script>
    </body>
    </html>
    <?php 
    // aa.php
    // 获取请求参数里面的callback,获取数据成功后调用的函数名 $callback = $_GET['callback']; $param1 = $_GET['param1']; $res = array( array("id"=>1, "name"=>"name1"), array("id"=>2, "name"=>"name2") ); $res = json_encode($res); echo $callback . "(" . $res . ")"; ?>

    解析:

    • 先定义 success 函数,对获取数据后的操作
    • 然后通过 script 标签引入后台数据接口
    • 我这里后端使用 php 写的
    • 先获取请求参数中 callback 的值,以及其他参数
    • 对数据进行获取,编码,拼接字符串,调用 success 函数。

    jquery使用jsonp

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <h3>控制台</h3>
        <script type="text/javascript" src="./jquery.js"></script>
        <script type="text/javascript">
            $.ajax({
                 type: "get",
                 url: "http://localhost/aa.php?param1=val1",
                 dataType: "jsonp",
    jsonp:
    "callback", // 传递给后台接口,用以获得jsonp回调函数名的参数名(一般默认为:callback)
            jsonpCallback:"flightHandler", // 自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名, // 也可以写"?",jQuery会自动为你处理数据
            success: function(data){ console.log('数据:', data); // 之后对数据的处理 }, error: function(){ alert('fail'); } }); </script> </body> </html>
  • 相关阅读:
    Centos6.5安装Oracle11.2.0.4 RAC(完整版)
    VMware搭建Oracle 11g RAC测试环境 For Linux
    Linux CentOS命令行界面字体重复问题解决记录
    SSH公钥认证(码云)
    Git 上传本地仓库到码云
    Git 相关工具及教程地址
    jdk8 新特性stream().map()
    PowerDesigner 使用记录
    IDEA 中.properties文件中文自动转Unicode编码及乱码问题
    idea在Maven Projects中显示灰色的解决办法
  • 原文地址:https://www.cnblogs.com/mu159/p/11361548.html
Copyright © 2020-2023  润新知