1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          jsonp跨域原理(JSONP跨域的原理是什么)

          來源:互聯網轉載 時間:2024-05-10 11:34:53

          JSONP是一個非官方的協議,它允許在服務器端集成script tags返回至客戶端,通過javascript callback的形式實現跨域訪問(這僅僅是JSONP簡單的實現形式)。JSON系統開發方法是一種典型的面向數據結構的分析和設計方法,以活動為中心,一連串的活動的順序組合成一個完整的工作進程。

          之所以會有跨域這個問題的產生根本原因是瀏覽器的同源策略限制,理解同源策略的限制同源策略是指阻止代碼獲得或者更改從另一個域名下獲得的文件或者信息。也就是說我們的請求地址必須和當前網站的地指相同。同源策略通過隔離來實現對資源的保護。這個策略的歷史非常悠久從Netscape Navigator 2.0時代就開始了。

          解決這個限制的一個相對簡單的辦法就是在服務器端發送請求,服務器充當一個到達第三方資源的代理中繼。雖然是用廣泛但是這個方法卻不夠靈活。

          另一個辦法就是使用框架(frames),將第三方站點的資源包含進來,但是包含進來的資源同樣要受到同源策略的限制。

          有一個很巧妙的辦法就是在頁面中使用動態代碼元素,代碼的源指向服務地址并在自己的代碼中加載數據。當這些代碼加載執行的時候,同源策略就不會起到限制。但是如果代碼試圖下載文件的時候執行還是會失敗,幸運的是,我們可以使用JSON(JavaScript Object Notation)來改進這個應用。

          JSON和JSONP

          與XML相比,JSON是一個輕量級的數據交換格式。JSON對于JavaScript開發人員充滿魅力的原因在于JSON本身就是Javascript中的對象。

          例如一個ticker對象

          var ticker = {symbol:'IBM',price:100}

          而JSON串就是 {symbol:'IBM',price:100}

          這樣我們就可以在函數的參數中傳遞JSON數據。我們很容易掌握在函數中使用動態的JSON參數數據,但是我們的目的并不是這個。

          通過使我們的函數能夠加載動態的JSON數據,我們就能夠處理動態的數據,這項技術叫做 Dynamic Javascript Insertion。

          我們看下面的例子:

          index.html中

          <scripttype="text/javascript">functionshowPrice(data){alert("Symbol:"+data.symbol+",Price:"+data.price);}varurl="ticker.js";//OuterJSURLvarscript=document.createElement('script');script.setAttribute('src',url);//loadjavascriptdocument.getElementsByTagName('head')[0].appendChild(script);</script>ticker.js中vardata={symbol:'IBM',price:100};showPrice(data);

          上面的代碼通過動態加入Javascript代碼,來執行函數加載數據。

          正如之前提到過的,同源策略對于動態插入的代碼不適用。也就是你可以從不同的域中加載代碼,來執行在他們代碼中的JSON數據。

          這就是JSONP(JSON with Padding)。注意,使用這種方法時,你必須在頁面中定義回調函數,就像上例中的showPrice一樣。

          我們通常所說的JSONP服務(遠程JSON服務),實際上就是一種擴展的支持在用戶定義函數中包含返回數據的能力。這種方法依賴于必須接受一個回調函數的名字作為參數。

          然后執行這個函數,處理JSON數據,并顯示在客戶頁面上。

          JQuery的JSONP支持

          從JQery 1.2以后,就開始支持JSONP的調用。在另外的一個域名中指定好回調函數名稱,你就可以用下面的形式來就加載JSON數據。

          url?callback=?

          示例:

          jQuery.getJSON(url+"&callbak=?",function(data){alert("Symbol:"+data.symbol+",Price:"+data.price);});

          jquery會在window對象中加載一個全局的函數,當代碼插入時函數執行,執行完畢后就會被移除。同時jquery還對非跨域的請求進行了優化,如果這個請求是在同一個域名下那么他就會像正常的Ajax請求一樣工作。

          上例中我們在動態插入到頁面的代碼中使用了靜態的json數據,雖然完成了依次JSONP返回,但仍不是JSONP服務,因為不支持在URL中定義回調函數名稱。下面是一個將其變成JSONP服務的一個方法

          服務器端使用PHP。

          首先我們來定義接口的規范,就像這樣:http://www.mydomain.com/jsonp/ticker?symbol=IBM&amp;callback=showPrice
          symbol是請求條件,callback是回調函數名稱。

          在頁面文件中,我們使用JQuery的支持:

          //JQueryJSONPSupportvarurl="http://www.mydomain.com/api/suggest.php?symbol=IBM&callback=?";jQuery.getJSON(url,function(data){alert("Symbol:"+data.symbol+",Price:"+data.price);});

          在suggest.php中

          $jsondata="{symbol:'IBM',price:120}";echo$_GET['callback'].'('.$jsondata.')';

          再舉個.NET webservice 的例子

          客戶端

          $.getJSON("http://192.168.0.66/services/WebService1.asmx/ws?callback=?",{name:"ff",time:"2pm"},function(data){alert(decodeURI(data.msg))});

          服務器端

          [WebMethod]publicvoidws(stringname,stringtime){HttpRequestRequest=HttpContext.Current.Request;stringcallback=Request["callback"];HttpResponseResponse=HttpContext.Current.Response;Response.Write(callback+"({msg:'thisis"+name+"jsonp'})");Response.End();}

          現在,如果我們想制作一些mashup,或者將第三方的資源整合到一個頁面中,我們就很容易想到JSONP的解決方法了。

          注意:

          JSONP是一個非常強大的構建mashp的方法,可是不是一個解決跨域訪問問題的***藥。它也有一些缺點:

          ***也是最重要的:JSONP不提供錯誤處理。如果動態插入的代碼正常運行,你可以得到返回,但是如果失敗了,那么什么都不會發生。你無法獲得一個404的錯誤,也不能取消這個請求。

          另外一個重要的缺點是如果使用了不信任的服務會造成很大的安全隱患。

          關于JSONP跨域的原理是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

          標簽:jsonp跨域原理-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          銀行電子賬戶是什么?銀行電子賬戶是銀行賬戶的一種,包括有銀行、信用卡等電子賬戶管理以及網上操作的金融服務。電子賬戶的作用還是比較豐富的,能夠實現多賬戶管理,并且享受投資、理財、融資、網上支付、公共事業費繳納等全方位個人金融服務。開通電子賬戶有什么用?開通電子賬戶作用:1、電子賬戶具備借記卡的大部分功能,能實現多賬戶管理,并享受投資、理財、融資、網上支付、公共事業費繳納等全方位個人金融服務;2、賬戶...

          開戶信息怎么查詢?【1】可以到銀行卡相應的銀行柜臺進行查詢。辦理業務的時候,直接詢問工作人員并且提供身份證信息即可?!?】通過電話咨詢客服,根據客服提示進行操作,隨后客服將告知用戶所需要的信息?!?】用戶可以登錄發卡銀行的相關APP,輸入個人信息之后登錄到首頁中即可查詢到相關的開戶信息。上述是持卡者可以采取的方式,如果銀行卡是用戶自己的,用戶可以打該銀行的客服電話進行詢問。而且用戶開通了網上銀行的...

          小投資生財之道怎么做才好?1、小投資和理財要量力而行投資時一定要根據自己的實際情況制定自己的理財計劃,分清個人或家庭的生活費、存款、日常消費、理財錢,將理財錢分成不同的比例進行投資。同時,投資的時候一定要根據自己現有的資金進行投資,量力而行。2、選擇最適合的理財方式做小投資理財不要隨波逐流,每個人的財產狀況、風險承受能力、收益預期都不一樣,對投資理財產品的選擇也不一樣。所以,選擇自己了解的適合自己...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>