php利用jsonp实现跨域

 更新时间:2023年11月09日 08:52:52   作者:PHP隔壁老王邻居  
JSONP(JSON with Padding)是一种使用普通的<script>标签来发起跨域请求的方法,本文主要为大家详细介绍了PHP如何利用jsonp实现跨域,需要的可以参考下

JSONP(JSON with Padding)是一种使用普通的<script>标签来发起跨域请求的方法。JSONP利用了HTML页面可以直接引入外部JavaScript文件而不受同源策略限制的特性

实现效果

1、实现代码中php文件

<?php
// 接收GET请求参数
$param = $_GET['callback'];
// 生成需要返回的数据
$data = array(
    'name' => '张三',
    'age' => 23
);
// 将数据转换为JSON字符串
$jsonStr = json_encode($data);
// 安全过滤回调函数名
$callback = preg_replace('/[^a-zA-Z0-9_]/', '', $param);
// 返回带有回调函数名和JSON数据的响应
echo $callback . '(' . $jsonStr . ')';

 2、js代码

<!DOCTYPE html>
<html>
 
<head>
    <meta charset="UTF-8">
    <title>JSONP跨域请求示例</title>
</head>
<body>
<script>
    function handleResponse(data) {
        // 在这里处理返回的数据
        console.log(data);
    }
    var script = document.createElement('script');
    script.src = 'http://localhost/test5.php?callback=handleResponse';
    if (document.body) {
        document.body.appendChild(script);
    } else {
        document.addEventListener('DOMContentLoaded', function() { document.body.appendChild(script); });
    }
</script>
</body>
</html>

JSONP的原理如下:

在客户端,当需要从不同域的服务器获取数据时,创建一个<script>元素,并将其src属性设置为要请求的URL,并将回调函数的名称作为URL参数传递。

在服务器端,接收到带有回调函数名称的请求后,服务器会将数据使用回调函数包裹起来作为响应返回给客户端。

在客户端,浏览器解析返回的JavaScript代码,并执行其中的回调函数,将数据传递给回调函数进行处理。 具体流程如下:

客户端通过动态创建<script>元素,设置其src属性为跨域请求的URL,并在URL中传递一个回调函数的名称作为参数,例如:http://example.com/data?callback=handleResponse。

服务器接收到这个请求后,根据参数中的回调函数名称,将要返回的数据使用回调函数进行包裹,例如:handleResponse({"name": "张三", "age": 23})。

服务器将包含回调函数和数据的响应返回给客户端,响应内容会被当作JavaScript代码解析。

客户端浏览器解析响应内容,并执行其中的回调函数,将数据传递给回调函数进行处理。这样,跨域请求的数据就被成功获取到了。 JSONP的关键在于使用了普通的<script>标签去请求跨域资源,并且服务器返回的是可执行的JavaScript代码,这样浏览器就能够成功加载并执行返回的代码。由于JavaScript没有同源策略限制,因此可以跨域访问数据。但需要注意的是,JSONP只支持GET请求,不支持POST等其他类型的请求。另外,为了避免安全风险,应当对回调函数的名称进行严格的过滤,确保只允许合法的回调函数名称被执行。

到此这篇关于php利用jsonp实现跨域的文章就介绍到这了,更多相关php jsonp跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PHP+MySQL存储数据常见中文乱码问题小结

    PHP+MySQL存储数据常见中文乱码问题小结

    这篇文章主要介绍了PHP+MySQL存储数据常见中文乱码问题,针对php+mysql常见的中文乱码问题予以总结分析,并给出了解决方法供大家参考,需要的朋友可以参考下
    2016-06-06
  • php处理json格式数据经典案例总结

    php处理json格式数据经典案例总结

    这篇文章主要介绍了php处理json格式数据的方法,详细讲述了json格式数据的概念与用法,并结合经典案例总结分析了php操作json格式数据的常用技巧,需要的朋友可以参考下
    2016-05-05
  • php中如何执行linux命令详解

    php中如何执行linux命令详解

    开发中遇到一种问题,需要在php函数中运行Linux系统代码,所以下面这篇文章主要给大家介绍了关于php中如何执行linux命令的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-11-11
  • 基于PHP文件操作的详解

    基于PHP文件操作的详解

    本篇文章是对PHP文件操作的应用进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php不用GD库生成当前时间的PNG格式图象的程序

    php不用GD库生成当前时间的PNG格式图象的程序

    该程序是不用GD库可以生成当前时间的PNG格式图象,给人大开眼界,很有参考价值. teaman整理
    2008-09-09
  • PHP命名空间namespace用法实例分析

    PHP命名空间namespace用法实例分析

    这篇文章主要介绍了PHP命名空间namespace用法,结合实例形式分析了php中命名空间的功能、使用方法及相关注意事项,需要的朋友可以参考下
    2016-09-09
  • PHP编写登录验证码功能 附调用方法

    PHP编写登录验证码功能 附调用方法

    这篇文章主要介绍了PHP编写登录验证码功能,文末附调用方法,并包含随机字符函数,和GD库画图函数,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 使用纯php代码实现页面伪静态的方法

    使用纯php代码实现页面伪静态的方法

    这篇文章主要介绍了使用纯php代码实现页面伪静态的方法,涉及php服务器预定义变量及正则匹配的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • PHP调用QQ互联接口实现QQ登录网站功能示例

    PHP调用QQ互联接口实现QQ登录网站功能示例

    这篇文章主要介绍了PHP调用QQ互联接口实现QQ登录网站功能,结合实例形式分析php调用QQ互联接口实现QQ登录网站的相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • PHP使用PHPExcel读取excel数据并批量上传到数据库

    PHP使用PHPExcel读取excel数据并批量上传到数据库

    这篇文章主要为大家详细介绍了PHP如何使用PHPExcel读取excel数据并批量上传到数据库,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2024-12-12

最新评论