zoukankan      html  css  js  c++  java
  • 转载的别人的ajax跨域解决方法

    http://dynamic.vip.xxxxxx.com/active/<controllers>/<active>/<id>
    放在浏览器地址栏中访问可以得到正确的输出,但我一放到 AJAX 中去异步请求后用 FireBug 调试时确怎么都不出结果,和水龙兄一起调试了很久都没有发现是什么问题,由于这个URL对方的程序是用XX框架写的,我是第一次使用这个XX框架进行开发,对它不是很熟(有时间要研究一下它的内核源码),总以为是它什么地方有设置影响了的;就在我快要吐血时,乐锋(对这块比较了解的哥们)终于上线了,我把问题向他说下后,他第一反应就是:”你是不是跨域访问了。。”
    OH FUCK,我和水龙一直研究程序逻辑,竟然忽视了自己的当前域名,因为我当前执行请求的域名是:
    http://vip.xxxxxx.com/active1/index.html
    问了一下乐锋,现系统中已提供的几个方案(函数)都不太令人满意或太烦琐了,和乐锋讨论了几种方案后,一时没有找到最好解决方案,一看时间,22:00了,天色已晚,不打扰他晚上陪老婆了!回到家里本想通过利用 iframe 来加载跨域的 url 来得到 dom 数据,研究后发现的想法太天真了,JS的安全策略跟本不允许我这样做;想通过 proxy 代理的方案,但想了一下,那比现在系统中所使用的方案更麻烦,详细研究了一下jQuery最新版关于跨域的解决方案后,终于让我研究出了一种非常方便的解决方案:
    如下是代码示例:
    —————— http://a.com/index.html ——————-

    <script type="text/javascript" src="jquery-1.4.2.js"></script>
    <script type="text/javascript">
    /*
    AJAX跨域问题完美解决方案
    研究:袁维
    启示:乐锋
    */
    function jsonCallBack(url,callback)
    {
    $.getScript(url,function(){
    callback(json);
    });
    }
    function fun1()
    {
    jsonCallBack('http://b.com/b.php',function(json){
    alert(json.message);
    })
    }
    </ script>
    <button type="button" onclick="fun1()">跨域访问</button>
    —————— http://b.com/b.php ——————-

    <?php
    $ary = array('result'=>0,'message'=>'跨域成功');
    $json = json_encode($ary);
    //一定要这样定义输出最后的JSON数据,这是利用JS的闭包特性
    echo "var json=$json;";
    ?>

    该方案注意事项:
    1:jQuery的版本必需大于 1.2版,否则不支持跨域处理
    2:只支持 GET 方式的请求
    2:请求的 URL 必需按如下例子中那样返回数据.
    该方案注意利弊:
    优点:
    1:比用 iframe 加输出 parent.XXX() 的方案简单高效明了,前端处理更方便
    2:相当 proxy 方式在编程上也简单多了
    缺点:
    1:必需使用jQuery,
    2:返回的数据格式必需按示例样,当然不限于JSON,但它是处理最方便的.
    (跨域服务器支持常规”?”查询请求的解决方案,利用JQuery的JSONP)
    ——————— http://b.com/index ———————-

    <script src="jquery-1.4.2.js" type="text/javascript"></script>
    <script type="text/javascript">
    function fun1()
    {
    $.getJSON("http://a.com/c.php?no=10&msg=ok&format=json&jsoncallback=?",
    function(data){
    alert(data.msg);
    });
    }
    </script>
    <button type="button" onclick="fun1()">跨域处理</button>

     
    ——————– http://a.com/c.php ———————-

    <?php
    $no = $_GET['no'];
    $msg = $_GET['msg'];
    $json = json_encode(array('no'=>$no,'msg'=>$msg));
    //必需以下这样输出
    echo $_GET['jsoncallback'].'('.$json.')';


  • 相关阅读:
    「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 下)
    「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 上)
    mocha_JavaScript单元测试框架
    Node介绍
    javascript 时间格式化
    MacOS安装MongoDB
    wordpress创建过程
    博客框架推荐
    github基本使用
    基本操作3-分支冲突
  • 原文地址:https://www.cnblogs.com/bing521meng/p/4753062.html
Copyright © 2011-2022 走看看