zoukankan      html  css  js  c++  java
  • jQuery之ajax的跨域获取数据

    如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。意思就是远程服务端需要对返回的数据做下处理,根据客户端提交的callback的参数,返回一个callback(json)的数据,而客户端将会用script的方式处理返回数据,来对json数据做处理。JQuery.getJSON也同样支持jsonp的数据方式调用。下面演示关于jQuery处理跨域请求ajax的方式:

    服务器端(PHP为例):

    <?php
    $data = array('name'=>' 张三','age'=>22,'city'=>'newYork');
    sleep(3);            //人为设置一个等待(用于观察什么是ajax的同步与异步)
    responseAJAX($data); //响应请求返回数据
    
    
    /**
     * 返回处理后的ajax请求数据
     * @author martinzhang
     * @param  $data 待返回的数据
     * @return none
     */
    function responseAJAX($data){    
        $data = json_encode($data);
        $getCallBackName = $_REQUEST['callback'];   //获取callback调用的function函数名
        if($getCallBackName != ''){
            //使用了jsonp跨域请求
            $data = $getCallBackName.'('.$data.')'; //返回格式形如:callbackFunName({"name":" u5f20u4e09","age":22,"city":"newYork"})
            die($data);
        }else{
            //未跨域
            die($data);
        }    
    }


    客户端:

    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    <title>jsonp跨域</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <script type="text/javascript" language="javascript" src="../jquery-1.8.2.js"></script> 
    </head> 
    <body> 
    <form id="form1" runat="server"> 
    <div> 
    <input type="button" id="btn1" onclick="BtnClick()" value="jsonp" style="55px; height:20px;" /> 
    <input type="button" id="btn1" onclick="BtnClick2()" value="getJSON" style="55px; height:20px;" /> 
    </div>
    <p></p>
    <div id="dd"> 
    sd......
    </div> 
    <div> 
    <script type="text/javascript" language="javascript">
    //方式一:
    function BtnClick() {    
        $.ajax({ 
            url: 'http://others.com/0_module/0/jQuery/ajax_jsonp/serverAPI.php',
            //async: false,                     //ture表示异步(默认);false表示同步;
            type: 'get', 
            dataType : 'jsonp',                 //返回数据类型:需要显式指定
            jsonp: 'callback',                  //服务端用于接收callback调用的function名的参数名(变量名)
            //jsonpCallback: 'callbackFunName', //可以显式地指定callback的函数名【如果不设置此项jquery会使用一个随机的含时间串的名称做为callback的函数名】
            success: function(data){
                //alert(data);
                $('#dd').html(data.name); 
            }
        }); 
    
        alert('什么是异步?就是js不会等ajax何时请求回数据,程序顺序向下执行它下面的其它程序,ajax何时候请求回数据就何时处理');
    }
    
    //方式二:
    function BtnClick2() {
        $.ajaxSettings.async = false;           //显式声明此次请求为同步
        $.getJSON("http://others.com/0_module/0/jQuery/ajax_jsonp/serverAPI.php?callback=?",null,function(data){
            $('#dd').html(data.name); 
        });
    
        alert('何谓同步?就是必须等ajax请求回来数据之后,js才会顺序向下执行它下面的程序');
    }
    
    </script> 
    </div> 
    </form> 
    </body> 
    </html>


     

  • 相关阅读:
    jchdl
    jchdl
    UVa 11134 (区间上的贪心) Fabled Rooks
    UVa (二分) 11627 Slalom
    POJ 1037 (计数 + DP) 一个美妙的栅栏
    HDU 3448 Bag Problem
    HDu 3449 (有依赖的01背包) Consumer
    POJ 1456 (贪心+并查集) Supermarket
    POJ 2236 (简单并查集) Wireless Network
    POJ 1703 Find them, Catch them
  • 原文地址:https://www.cnblogs.com/martinzhang/p/3459706.html
Copyright © 2011-2022 走看看