PHP下ajax跨域的解决方案之window.name实例分析

 更新时间:2020年03月05日 11:48:25   作者:怀素真  
这篇文章主要介绍了PHP下ajax跨域的解决方案之window.name,结合实例形式分析PHP ajax跨域的解决方案window.name基本原理、操作技巧与相关注意事项,需要的朋友可以参考下

本文实例讲述了PHP下ajax跨域的解决方案之window.name。分享给大家供大家参考,具体如下:

原理核心:window对象的name属性是一个很特别的属性,当该window的location变化,然后重新加载,它的name属性可以依然保持不变。

依此原理,我们可以在页面A中用iframe加载其他域的页面B,而页面B中用JavaScript把需要传递的数据赋值给 window.name,页面A的iframe加载完成之后,页面A修改iframe的地址,将其变成同域的一个地址,然后就可以读出window.name的值了。

例:有两个网站www.a.com和www.b.com,我们要在www.a.com/a.html下获取www.b.com/data.html数据。

我们需要三个文件:

www.a.com 下的 a.html 获取数据并显示
www.b.com 下的data.html 提供数据
www.a.com 下的proxy.html 代理文件,与a.html同一域下,一般为空html文件。

www.b.com下的data.html如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Insert title here</title>
</head>
<body>
  <script type="text/javascript">
    //添加需要传递的数据,大小一般为2M,IE和firefox下可以大至32M左右
    window.name = '[{"name":"test1"},{"name":"test2"}]';
  </script>
</body>
</html>

www.a.com下的proxy.html如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Insert title here</title>
</head>
<body>
  <!-- 空的html文件 -->
</body>
</html>

www.a.com下的a.html如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Insert title here</title>
</head>
<body>
 
<!-- 用于引用www.b.com/data.html文件 -->
<iframe id="iframe" src=""></iframe>
 
<!-- 显示获取到的数据 -->
<div id="data"></div>
 
<script type="text/javascript" src="./jquery.js"></script>
<script type="text/javascript">
var ifr = document.getElementById("iframe");
ifr.src = "http://www.b.com/data.html";
if (ifr.attachEvent) {
  ifr.attachEvent("onload", loadfunc);
} else {
  ifr.onload = loadfunc;
}
 
var state = 0;
function loadfunc() {
  if(state == 0) {
    state = 1;
    ifr.contentWindow.location = "http://www.a.com/proxy.html";
  } else {
    var data = ifr.contentWindow.name;
    $.each($.parseJSON(data), function(i, v) {
      $("#data").append(v.name);
    });
     
    //销毁iframe,保证安全
    ifr.contentWindow.document.write("");
    ifr.contentWindow.close();
    document.body.removeChild(ifr);
  }
}
</script>
</body>
</html>

更多关于PHP相关内容可查看本站专题:《PHP+ajax技巧与应用小结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • php删除与复制文件夹及其文件夹下所有文件的实现代码

    php删除与复制文件夹及其文件夹下所有文件的实现代码

    最近写代码,需要个复制文件夹与及其文件夹下所有文件的功能,有时候需要删除,就可以用这个函数了,通过xcopy与deldir的自定义函数,确实方便多了,特分享下
    2013-01-01
  • PHP中4种常用的抓取网络数据方法

    PHP中4种常用的抓取网络数据方法

    这篇文章主要介绍了PHP中4种常用的抓取网络数据方法,本文讲解使用file_get_contents函数、fopen函数、curl库三种常见方法抓取网络数据,并给出了代码实例,需要的朋友可以参考下
    2015-06-06
  • IIS+PHP添加对webp格式图像的支持配置方法

    IIS+PHP添加对webp格式图像的支持配置方法

    这篇文章主要介绍了IIS+PHP添加对webp格式图像的支持,需要的朋友可以参考下
    2023-04-04
  • PHP远程调用以及RPC框架

    PHP远程调用以及RPC框架

    这篇文章主要介绍了PHP远程调用以及RPC框架,对远程调用感兴趣的同学,可以参考下
    2021-04-04
  • PHP垃圾回收机制的一些理解

    PHP垃圾回收机制的一些理解

    这篇文章主要介绍了PHP垃圾回收机制的一些理解,帮助大家更好的理解和学习使用PHP,感兴趣的朋友可以了解下
    2021-04-04
  • php 文件上传系统手记

    php 文件上传系统手记

    说是手记,实际上整个程序已经写完了,虽然有点难看,但还行..毕竟是自己动手写得第一个程序...
    2009-10-10
  • 11个PHPer必须要了解的编程规范

    11个PHPer必须要了解的编程规范

    从设计之初,PHP被广泛用于开发基于Web的应用程序。 由于PHP是一种脚本语言,开发的时候必须遵守一些规范。
    2014-09-09
  • PHP实现web socket长链接流程详解

    PHP实现web socket长链接流程详解

    这篇文章主要介绍了PHP实现web socket长链接流程,了解内部原理是为了帮助我们做扩展,同时也是验证了一个人的学习能力,如果你想让自己的职业道路更上一层楼,这些底层的东西你是必须要会的
    2023-03-03
  • 详解PHP多进程消费队列

    详解PHP多进程消费队列

    本文详细介绍了PHP多进程消费队列,感兴趣的同学,可以参考下,理解其原理。
    2021-06-06
  • PHP链表操作简单示例

    PHP链表操作简单示例

    这篇文章主要介绍了PHP链表操作,结合简单实例形式分析了php链表的定义与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-10-10

最新评论