zoukankan      html  css  js  c++  java
  • ajax 跨域解决 网上资料

    PHP中运用jQuery的Ajax跨域调用实现代码,需要的朋友可以参考下
     
    可以在页面定义一个调用方法,如下: 
    复制代码代码如下:

    function getData(){ 
    $.getJSON("http://123.123.123.123/?callback=?", 

    "m":"data",// 指定php的文件名字 
    "act":"getdata",// 指定php文件中的方法 
    "name":"问题儿童"// 传入的参数 
    }, 
    function(data) { 
    // 获得返回值 

    }); 

    对应链接下(123.123.123.123)的PHP文件,一般默认先调用index.php文件,通过index.php文件内的方法处理后,转到对应的php文件,并且找到对应的方法,执行之。 
    index.php代码如下: 
    复制代码代码如下:

    <?php 
    /** 
    * 入口文件 
    */ 
    $string = $_SERVER["REQUEST_URI"];// 获取访问的url 
    $m = get_m($string); 
    $file_path = "app/".$m.".php"; 
    define('IS_INDEX',true);// 阻止直接访问app目录 
    require ($file_path); 
    /** 

    * 获取访问php文件 
    * @param string $url 
    */ 
    function get_m($url){ 
    $strings = explode('m=', $url); 
    $res = explode("&", $strings[1]); 
    return empty($res[0])?'index':$res[0]; 

    ?> 

    data.php代码如下: 
    复制代码代码如下:

    <?php 
    /** 
    * data文件 
    */ 
    $act = !empty($_GET['act']) ? $_GET['act'] : ''; 
    if ($act == 'getdata') 

    $name = "我的名字叫:".$_REQUEST['name']; 
    echo $_REQUEST["callback"]."(".json_encode($name).")"; 

    ?> 
     
     
     
    *****************************************************************************

    tml 代码清单:

    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <script type="text/javascript" src="http://www.youxiaju.com/js/jquery-1.4.2.min.js"></script>  
    2. <script type="text/javascript">  
    3. $(function(){  
    4. $.ajax(  
    5.     {  
    6.         type:'get',  
    7.         url : 'http://www.youxiaju.com/validate.php?loginuser=lee&loginpass=123456',  
    8.         dataType : 'jsonp',  
    9.         jsonp:"jsoncallback",  
    10.         success  : function(data) {  
    11.             alert("用户名:"+ data.user +" 密码:"+ data.pass);  
    12.         },  
    13.         error : function() {  
    14.             alert('fail');  
    15.         }  
    16.     }  
    17. );  
    18. })  
    19. </script>  

    服务端 validate.php 代码清单:
    [php] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <?php  
    2. header('Content-Type:text/html;Charset=utf-8');  
    3. $arr = array(  
    4.     "user" => $_GET['loginuser'],  
    5.     "pass" => $_GET['loginpass'],  
    6.     "name" => 'response'  
    7.   
    8. );  
    9. echo $_GET['jsoncallback'] . "(".json_encode($arr).")";  

    效果图:

    ********************************************************

    之前一篇博客详细的说明了jsonp协议,jquery ajax封装了jsonp协议,让跨域请求实现如此简单:

    1. $.ajax({
    2. type : "post",
    3. url : "http://www.phpddt.com/ajax/test",
    4. dataType : "jsonp",
    5. jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
    6. jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
    7. success : function(json){
    8. alert('success');
    9. },
    10. error:function(){
    11. alert('fail');
    12. }
    13. });


     服务器端处理如下:

    1. $data = .......
    2. $callback = $_GET['callback'];
    3. echo $callback.'('.json_encode($data).')';
    4. exit;


    当使用jsonp时,使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。

    ******************************************

    一个没那么难的历史难题,其实只要在被请求端,加一句:

    header('Access-Control-Allow-Origin: *');
    

    然后……然后没有了。

    ******************************

    示例one

    javascript客户端代码:
             $.getJSON("http://www.xxx.com/***.php?callback=?",{
                     info: info,
                     format: "json"
                  },
                  function(data) {
                      alert(data);
                  }
             );
    -------------------------------------------------------------------------------------------------

    php服务端代码:
    $callback = isset($_GET["callback"]) ? $_GET["callback"]:"callback";
    $getstr = isset($_GET["ajaxstr1"]) ? $_GET["ajaxstr1"] : "";
    $data = array('type'=>1);
    echo $_GET['callback'].'('.json_encode($data).')';
    exit;
    =============================================================================================  
    示例two
    javascript客户端:
    $.ajax({   
             type: "Get",  
             url: "http://www.baidu.com/?UserId=1001",  
             cache: false, 
             error: function () { },   
             jsonp: "callback",   
             dataType: "jsonp",
             success: function (result) { 
                alert(result.info);   
             } 
       }); 
    ---------------------------------------------------------------------------------------------
    php服务器端:
    $classid=$_GET['classid'];
    $num=$_GET['num'];
    if($classid&&$num){
    $results = array("key" => "value"); 
         echo $_GET['callback'] . '(' . json_encode($results) . ')';
     
    }
    但是目前鉴于ie浏览前支持P3P协议(W3C标准的安全协议),而firefox和chrome还不支持,所以在本地搭建环境做测试的时候会发现ie下无法实现跨域调用session去验证数据,只要在php文件头部添加下面的代码即可。
    header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"')
  • 相关阅读:
    ESRI的地图控件和DEV控件存在冲突,造成调试中断无法通过
    使用Flex读取操作Excel文档的组件(开源组件)
    Flex 使用FileReference遇到的问题(未解决)
    Flex 学习站点汇总
    Puppet文档:模块基础
    Python实现ssh批量登录并执行命令【转】
    OpenDNS打造自由干净的网络环境【转】
    LAMP实验三:远程连接MySQL
    Puppet效果图【转]
    国内外DNS服务器地址列表【转】
  • 原文地址:https://www.cnblogs.com/clphp/p/5337680.html
Copyright © 2011-2022 走看看