zoukankan      html  css  js  c++  java
  • js跨域

    出于安全性的考虑,在AJAX应用中,浏览器通常都会限制跨域提交数据,但这又恰恰是非常常用的需求。比如在a.com的页面上中提交一些请求数据到b.com的服务器上,b.com服务器处理请求完毕后返回响应内容到a.com的页面上。如何解决呢,使用js是比较简单易实现的方案,缺点是代码跟应用相关,无法抽象出模板机制进行重用。
    具体的原理和实现是这样的,在a.com的页面上,假设叫a.html, 提交数据的java script 事件中动态添加一个类型为java script 的节点,这个节点指向接收数据的b.com的动态页面,以php为例,假设叫b.php页面。
    但是在浏览器(包括IE系和Mozilla系以及Opera等)看来就像是包含一个真正的js脚本一样,因此它会去请求这个
    b.php,在b.php中处理相应逻辑之后,返回一小段打印结果的java script 代码即可。返回到a.html后浏览器负责解析这一小段java script 代码,打印或显示出请求结果。正是通过这种‘欺骗’浏览器的方式,实现了数据跨域的功能。
    a.html的相关Java script 代码如下:
    这个PostData()是数据提交的函数,ShowPrompt()是负责回调的打印结果的小函数
    function PostData()

     //.......
     var requestURL =
    'http://www.b.com/b.php?data1=' + data1+ '&data2=' + data2 ;
     var objHead = document.getElementsByTagName_r('head');
     var obj script = document.createElement(' script ');
     obj script .type = 'text/java script ';
     obj script .src = requestURL;
     objHead[0].appendChild(obj script );
     //......
    }
    function ShowPrompt(promptText)
    {
     alert(promptText);
    }
    b.php的相关代码如下:
    <?php

     function exitalert($alerttext)
     {
      echo("ShowPrompt('');");
      exit();
     }
    //read the request data...
      $alerttext .= "数据已收到,谢谢";
      exitalert($alerttext);
    ?>
    本文来源【学网】网站链接是http://www.xue5.com

  • 相关阅读:
    [转]JIRA 7.2.6与Confluence 6.0.3的安装与配置之MS SQL Server版
    Vue中computed和watch使用场景和方法
    vue插槽 slot 插槽之间的父子传参
    VUE 父子组件的传递 props、$ref 、 $emit、$parent、$children、$root
    div水平居中 垂直居中
    三次握手 四次挥手
    TCP/IP各层网络协议的通俗理解
    学习 cookie session 正向代理和反向代理的区别
    学习vuex心得体会
    登陆界面 跟后台对接口
  • 原文地址:https://www.cnblogs.com/thxuaimin/p/js.html
Copyright © 2011-2022 走看看