多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

json教程

  • 關于 JSON
  • JSON 教程

    json格式

    JSON解析

    JSON遍歷

    JSON調用

    JSON轉換

    JSON獲取

    JSON字符串

    JSON數組

    jquery ajax jsonp跨域調用實例代碼

    閱讀 (2250)

    什么是跨域?

    簡單的來說,出于安全方面的考慮,頁面中的JavaScript無法訪問其他服務器上的數據,即“同源策略”。而跨域就是通過某些手段來繞過同源策略限制,實現不同服務器之間通信的效果。

    具體策略限制情況可看下表:

    URL說明允許通信
    http://www.a.com/a.js
    http://www.a.com/b.js
    同一域名下允許
    http://www.a.com/lab/a.js
    http://www.a.com/script/b.js
    同一域名下不同文件夾允許
    http://www.a.com:8000/a.js
    http://www.a.com/b.js
    同一域名,不同端口不允許
    http://www.a.com/a.js
    https://www.a.com/b.js
    同一域名,不同協議不允許
    http://www.a.com/a.js
    http://127.0.0.100/b.js
    域名和域名對應ip不允許
    http://www.a.com/a.js
    http://script.a.com/b.js
    主域相同,子域不同不允許
    http://www.a.com/a.js
    http://a.com/b.js
    同一域名,不同二級域名(同上)不允許
    http://www.a.com/a.js
    http://www.b.com/b.js
    不同域名不允許

    什么是JSONP?

    JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,而JSONP(JSON with Padding)則是JSON 的一種“使用模式”,通過這種模式可以實現數據的跨域獲取。 

    JSONP跨域的原理

    在同源策略下,在某個服務器下的頁面是無法獲取到該服務器以外的數據的,但img、iframe、script等標簽是個例外,這些標簽可以通過src屬性請求到其他服務器上的數據。利用script標簽的開放策略,我們可以實現跨域請求數據,當然,也需要服務端的配合。當我們正常地請求一個JSON數據的時候,服務端返回的是一串JSON類型的數據,而我們使用JSONP模式來請求數據的時候,服務端返回的是一段可執行的JavaScript代碼。

    舉個例子,假如需要從服務器(http://www.a.com/user?id=123)獲取的數據如下:

    1. {"id": 123, "name" : 張三, "age": 17}
    那么,使用JSONP方式請求(http://www.a.com/user?id=123?callback=foo)的數據將會是如下: 
    1. foo({"id": 123, "name" : 張三, "age": 17});
    當然,如果服務端考慮得更加充分,返回的數據可能如下: 
    1. try{foo({"id": 123, "name" : 張三, "age": 17});}catch(e){}

    這時候我們只要定義一個foo()函數,并動態地創建一個script標簽,使其的src屬性為http://www.a.com/user?id=123?callback=foo: 

    function executeJsonp(url){
      var eleScript= document.createElement("script");
      eleScript.type = "text/javascript";
      eleScript.src = url;
      document.getElementsByTagName("head")[0].appendChild(eleScript);
    }
    
    function foo(data){
        for(var p in data){
          console.log(data[p]);
        }
    }
    
    var url = "http://www.a.com/user?id=123?callback=foo";
    executeJsonp(url)

    便可以使用foo函數來調用返回的數據了。 


    在jQuery中如何通過JSONP來跨域獲取數據

    第一種方法是在ajax函數中設置dataType為'jsonp': 
    1. $.ajax({
    2.         dataType: 'jsonp',
    3.         url: 'http://www.a.com/user?id=123',
    4.         success: function(data){
    5.                 //處理data數據
    6.         }
    7. });
    第二種方法是利用getJSON來實現,只要在地址中加上callback=?參數即可: 
    1. $.getJSON('http://www.a.com/user?id=123&callback=?', function(data){
    2.         //處理data數據
    3. });

    也可以簡單地使用getScript方法:

    1. //此時也可以在函數外定義foo方法
    2. function foo(data){
    3.         //處理data數據
    4. }
    5. $.getJSON('http://www.a.com/user?id=123&callback=foo');

    JSONP的應用

    JSONP在開放API中可以起到非常重要的作用,開放API是運用在開發者自己的應用上,而許多應用往往是在開發者的服務器上而不是在新浪微博的服務器上,因此跨域請求數據成為開發者們所需要解決的一大問題,廣大開放平臺應該實現對JSONP的支持,這一點新浪微博開放平臺便做的非常好(雖然某些API里沒有說明,但實際上是可以使用JSONP方式調用的)。


    jquery ajax jsonp跨域調用實例代碼

    使用GET方式和POST方式都可以進行跨域調用

    客戶端代碼

    代碼如下:
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApp.WebForm1" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <script src="jquery-1.7.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        function aa() {
            $.ajax({
                url: "http://localhost:12079/WebForm2.aspx",
                data: "p1=1&p2=2&callback=?",
                type: "post",
                processData: false,
                timeout: 15000,
                dataType: "jsonp",  // not "json" we'll parse
                jsonp: "jsonpcallback",
                success: function(result) {
                alert(result.value1);
                }
            });
        }
    
    </script>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
    
        </div>
        </form>
        <p>
            <input id="Button1" type="button" value="button" onclick="aa()" /></p>
    </body>
    </html>
    

    服務器端代碼

    代碼如下:
     public partial class WebForm2 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
               
             string callback = Request["callback"]; 
                string v1="1";
                string v2="2";
                string response = "{\"value1\":\"" + v1 + "\",\"value2\":\"" + v2 + "\"}";
                string call = callback + "(" + response + ")";
                Response.Write(call);
                Response.End();
            }
        }

    客戶端頁面和服務器端頁面在兩個項目中,以便進行跨域調用測試。

    跨域實例代碼(需要加載jquery,頁面為utf-8編碼):

    代碼如下:
     <!--拉勾招聘數據-->
      <script type="text/javascript">
       function success_jsonpCallback(data){
        var html = '';
        var pos = '';
        html += '<ul>';
        jQuery.each(data, function(k, v) {
                     if(k<10){
                      pos = '【' + v.city+ '】' + v.positionName + '('+ v.salary +') - '+v.companyName;
          if(pos.length > 20){
           pos = pos.substring(0,19)+'...';
                         }
                         html += '<li><a href="'+v.posiitonDetailUrl+'" target="_blank" title="【' + v.city+ '】' + v.positionName + '('+ v.salary +') - '+v.companyName+'">'+pos+'</a></li>';
                     }
        });
        html += '</ul><div class="more-link"><a href="http://www.lagou.com/jobs/list_%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91" target="_blank">更多</a></div>';
        jQuery('#lagouData').html(html);
       }
    
       function getLagouData() {
        jQuery.ajax({
         async:false,
         url: "http://www.lagou.com/join/listW3cplus?kd=%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91",
         type: "GET",
         dataType: "jsonp",
         jsonpCallback: 'success_jsonpCallback',
         contentType: "application/jsonp; charset=utf-8",
         success: function(data) {
          success_jsonpCallback(data);
         }
        });
       }
       getLagouData();
      </script>
      <div id="lagouData"></div>

    jsonp代碼:

    代碼如下:

    success_jsonpCallback([{"city":"廣州","companyName":"POCO.CN","createTime":"15:02發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/16868.html","positionAdvantage":"身處凝聚力團隊,老城區上班交通便利,雙休","positionName":"商業前端開發工程師","salary":"4k-7k"},{"city":"北京","companyName":"美通云動(北京)科技有限公司","createTime":"14:47發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/16866.html","positionAdvantage":"Html5技術最棒的團隊","positionName":"Web前端開發","salary":"4k-8k"},{"city":"杭州","companyName":"口袋購物","createTime":"14:42發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/13024.html","positionAdvantage":"廣闊的發展平臺、自我價值體現的地方","positionName":"web前端開發工程師","salary":"8k-12k"},{"city":"北京","companyName":"布丁移動","createTime":"14:02發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/1498.html","positionAdvantage":"三餐、周圍美女如云","positionName":"Android開發工程師","salary":"10k-20k"},{"city":"北京","companyName":"布丁移動","createTime":"14:02發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/2539.html","positionAdvantage":"三餐,小橋流水人家,美女","positionName":"ios開發工程師","salary":"10k-20k"},{"city":"上海","companyName":"天天動聽","createTime":"00:55發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/11494.html","positionAdvantage":"創業氛圍 講求小而美","positionName":"Android開發工程師","salary":"8k-16k"},{"city":"北京","companyName":"LBE安全大師","createTime":"11:39發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/5983.html","positionAdvantage":"五險一金 績效獎金","positionName":"Android開發工程師","salary":"8k以上"},{"city":"北京","companyName":"點心移動","createTime":"11:24發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/16736.html","positionAdvantage":"技術導向的團隊氛圍,全方位的福利待遇","positionName":"Android","salary":"15k-25k"},{"city":"廣州","companyName":"荔枝FM","createTime":"10:44發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/16634.html","positionAdvantage":"連堅持跑步、保持體重都有獎勵哦!","positionName":"WP手機開發工程師","salary":"16k-25k"},{"city":"北京","companyName":"網銀-京東子公司","createTime":"10:08發布","posiitonDetailUrl":"http://www.lagou.com:80/jobs/14162.html","positionAdvantage":"負責京東商城-互聯網金融產品 JS開發","positionName":"Javascript 前端開發工程師","salary":"10k-20k"}])
    
    


    關閉
    程序員人生
    主站蜘蛛池模板: 羞羞动漫视频在线观看 | 久久影视一区 | 黄色免费网址大全 | 色婷婷成人 | 欧美最猛性xxxxx亚洲精品 | 欧美专区亚洲 | 亚洲国产一区二区三区精品 | 国产三区视频李宗瑞 | 性色免费视频 | 午夜在线免费视频 | 欧美日韩午夜精品不卡综合 | 天堂亚洲国产日韩在线看 | 另类ts人妖一区二区三区 | 亚洲激情视频在线播放 | 欧美一区二区三区四区五区六区 | 久久国产免费 | 欧美羞羞 | 一级毛片在播放免费 | 欧美日韩亚洲国产一区二区综合 | 韩国女主播一区二区三区视频 | 日本一区二区免费在线观看 | 欧美白人和黑人xxxx猛交视频 | 国产女乱淫真高清免费视频 | 中文精品久久久久中文 | 亚洲精品专区一区二区欧美 | 中国精品视频 | 999yy成年在线视频免费看 | 国产日韩欧美亚洲综合 | h视频在线观看网站 | 欧美日韩精品免费一区二区三区 | 久久国产欧美日韩高清专区 | 欧美.亚洲.日本一区二区三区 | 日韩欧美国产另类 | 欧美一区二区三区在线视频 | ff性欧美 | 波多野结衣在线资源 | 成年人免费看视频 | 日本欧美精品 | 毛片在线网址 | 日本www在线观看 | www日本免费 |