zoukankan      html  css  js  c++  java
  • PHP-Ajax跨域解决方案

    1.先了解下Ajax跨域问题:

     1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3     <head>
     4         <title>AJAX跨域验证</title>
     5         <script>
     6             var xmlHttp;
     7             function createXMLHttpRequest() {
     8                 if (window.ActiveXObject) {
     9                     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    10                 }
    11                 else if (window.XMLHttpRequest) {
    12                     xmlHttp = new XMLHttpRequest();
    13                 }
    14             }
    15 
    16             function hello() {
    17                 var url = 'http://www.google.com';   
    18                 createXMLHttpRequest();
    19                 xmlHttp.onreadystatechange = showResponse;
    20                 xmlHttp.open("GET", url, true);
    21                 xmlHttp.send(null);
    22             }
    23 
    24             function showResponse(){
    25                 if(xmlHttp.readyState == 4) {
    26                     if(xmlHttp.status == 200) {        
    27                     document.getElementById("result").setAttribute("value",xmlHttp.responseText) ;
    28                     }
    29                 }
    30             }
    31         </script>
    32     </head>
    33     <body> 
    34         <input type="button" value="hello" onclick="hello()"><br/><br/>
    35         <textarea id="result" name="result" cols=100 rows=100 ></textarea>
    36     </body>
    37 </html>

    如果以上代码放到Apache服务器下, 访问的话不会得到任何结果, 也就是说Ajax只能访问本站的资源。

    那为什么限制Ajax跨域呢?

      安全!如果能跨域访问的话, 想想CSRF攻击!

    解决方案:

      1.建立中间层;

        用Ajax访问本站, 本站PHP利用file_get_contents()或CURL等工具去请求指定URL并返回想要结果

      2.利用jQuery的一些Ajax访问方法, 比如$.ajax(), jQuery.getScript(), $.getJson等

      3.直接改变script标签的src属性, 而src属性对应的URL返回设置的值(比如返回'var param="abcd";', 则页面可以直接调用param变量)

      4.由于src属性(比如script、img、iframe)都拥有跨域的能力, 所以可以利用jsonp(可以认为是一种方式, 利用src), 虽然jQuery把jsonp归入ajax, 但他们真不是一回事儿, ajax的核心是通过XmlHttpRequest获取非本页内容, 而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本

  • 相关阅读:
    sql server 操作文件
    sql server T-sql查询执行顺序
    js 时间相关函数
    js页面 :函数名 is not defined
    C# 通过文件路径获取文件名
    WRAR下载及注册
    Java 中xml解析
    string 与 byte[] 互转时的注意事项
    Spring MVC表单标签
    java 中基本类型与字符串之间的互相转换
  • 原文地址:https://www.cnblogs.com/JohnABC/p/3340230.html
Copyright © 2011-2022 走看看