首頁 web前端 js教程 jquery的ajax和getJson跨域取得json資料的實作方法_jquery

jquery的ajax和getJson跨域取得json資料的實作方法_jquery

May 16, 2016 pm 05:01 PM
ajax jquery json

很多開發人員在使用jquery在前端和伺服器端進行資料交互,所以很容易會認為在前端利用jquery就可以讀取任何站點的資料了。最近在進行開 發時,因為要和第三方公司的一個專案進行資料的共享,因為考慮多不佔用伺服器的資源,遂決定直接在html進行資料的讀取,不走伺服器端進行中轉了。然後 正好就遇到了瀏覽器端跨網域存取的問題。

跨網域的安全限制都是指瀏覽器端來說的,伺服器端不存在跨網域安全限制的問題。

目前瀏覽器端跨域存取常用的兩種方法有兩種:

1、透過jQuery的ajax進行跨域,這其實是採用的jsonp的方式來實現的。

jsonp是英文json with padding的縮寫。它允許在伺服器端產生script tags至返回客戶端,也就是動態產生javascript標籤,透過javascript callback的形式實現資料讀取。

html頁端範例程式碼:

複製程式碼 程式碼如下:


程式碼如下:

 要引入jquery的js包

 jQuery(document).ready(function(){

     $.ajax({

         type : "get", //jquey是不支援post方式跨域的

         async:false,

         url : "http://api.taobao.com/apitools/ajax_props.do", //跨域請求的URL

         dataType : "jsonp",

         //傳遞給請求處理程序,以取得jsonp回呼函數名稱的參數名稱(預設為:callback)

         jsonp: "jsoncallback",

         //自訂的jsonp回呼函數名稱,預設為jQuery自動產生的隨機函數名稱

         jsonpCallback:"success_jsonpCallback",

         //成功取得跨網域伺服器上的json資料後,會動態執行這個callback函數

         success : function(json){ 

             alert(json);

          }
     伺服器端程式碼,是重點,開始以為,只要客戶端透過jsonp就可以直接跨網域訪問,其實不然,需要伺服器端的支援才行。


複製程式碼 程式碼如下:
 public void
     HttpServletRequest request = ServletActionContext.getRequest();

     HttpServletResponse response = ServletActionContext.getResponse();

     //依據html指定的jsonp回呼函數的參數名,以取得回呼函數的名稱

     //callbackName的值其實就是:success_jsonpCallback

     String callbackName = (String)request.getAttribute("jsoncallback");

     //簡單模擬一個json字串,實際可使用google的gson進行轉換,次數透過字串拼接

     //{"name":"張三","age":28}

     //是對"號進行轉義

     String jsonStr = "{"name":"張三","age":28}";

     //最終回傳的資料為:success_jsonpCallback({"name":"張三","age":28})

     String renderStr = callbackName "(" jsonStr ")";

     response.setContentType("text/plain;charset=UTF-8");

     response.getWriter().write(renderStr);

 }



jsonp的原理:

先在客戶端註冊一個callback (如:'jsoncallback'), 然後把callback的名字(如:success_jsonpCallback)傳給伺服器端對應的處理函數。

伺服器先生成需要傳回給客戶端的 json 資料。然後以 javascript 語法的方式,產生一個function , function 名字就是傳遞上來的參數(jsoncallback)的值(success_jsonpCallback) 。

最後將 json 資料直接以入參的方式,放置到 function 中,這樣就產生了一段 js 語法的文檔,返回給客戶端。
客戶端瀏覽器,解析script標籤,並將伺服器端傳回的數據,作為參數,
傳入到了客戶端預先定義好的callback 函數(如上例中jquery $.ajax()方法封裝的的success: function (json))裡。

實際上跨域是透過動態增加script來載入數據,無法直接取得數據,所以需要使用回調函數。

2.使用jquery的getJson進行跨域讀取資料

實際上getJson方式的根本原理和ajax使用jsonp的方式是一樣的。

jquery中常用getJson來呼叫取得遠端的數據,並透過json格式傳回。函數的原型如下:

jQuery.getJSON(url,data,success(data,status,xhr))

參數 描述
url 必需。規定將請求發送的哪個 URL。
data 可選。規定連同請求發送到伺服器的資料。
success(data,status,xhr)
参数 描述
url 必需。规定将请求发送的哪个 URL。
data 可选。规定连同请求发送到服务器的数据。
success(data,status,xhr)

可选。规定当请求成功时运行的函数。

额外的参数:

  • response - 包含来自请求的结果数据
  • status - 包含请求的状态
  • xhr - 包含 XMLHttpRequest 对象
可選。規定當請求成功時運行的函數。

額外的參數:

  • response - 包含來自請求的結果數據
  • status - 包含請求的狀態
  • xhr - 包含 XMLHttpRequest 物件
函數是簡寫的ajax函數,實際上等價於:複製程式碼

程式碼如下:


$.ajax({
  url: url,
  data: data,
  success: callback,
  dataType: json
}); 🎜>言歸正傳,以下我們來看如何使用getJson跨域取得資料。

html頁面範例程式碼:

複製程式碼 程式碼如下:

$.getJSON(>$. "http://api.taobao.com/apitools/ajax_props.do&jsoncallback=?",
    function (data) {
        alert(data);
        alert(data);
     >

執行原理: 發送請求時需要傳一個callback的回呼函數名到伺服器端,伺服器端拿到這個回呼函數名,再將回傳資料用參數的形式反回客戶端,這樣客戶端就能夠調到。

所以發送請求URL的位址後面一定要上jsoncallback=?這樣的參數,jquery會將?號自動替換成自動產生的回呼函數的名稱。

所以最終的實際請求為:

http://api.taobao.com/apitools/ajax_props.do&jsoncallback=jsonp1322444422697 所以和ajax的方式想比較,也就是callback函數一個是自動產生的函數名,一個是手工指定的函數名。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1662
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1262
29
C# 教程
1235
24
PHP 與 Ajax:建立一個自動完成建議引擎 PHP 與 Ajax:建立一個自動完成建議引擎 Jun 02, 2024 pm 08:39 PM

使用PHP和Ajax建置自動完成建議引擎:伺服器端腳本:處理Ajax請求並傳回建議(autocomplete.php)。客戶端腳本:發送Ajax請求並顯示建議(autocomplete.js)。實戰案例:在HTML頁面中包含腳本並指定search-input元素識別碼。

PHP 數組轉 JSON 的效能最佳化技巧 PHP 數組轉 JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP數組轉JSON的效能最佳化方法包括:使用JSON擴充和json_encode()函數;新增JSON_UNESCAPED_UNICODE選項以避免字元轉義;使用緩衝區提高循環編碼效能;快取JSON編碼結果;考慮使用第三方JSON編碼庫。

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯

如何使用Ajax從PHP方法取得變數? 如何使用Ajax從PHP方法取得變數? Mar 09, 2024 pm 05:36 PM

使用Ajax從PHP方法取得變數是Web開發中常見的場景,透過Ajax可以實作頁面無需刷新即可動態取得資料。在本文中,將介紹如何使用Ajax從PHP方法中取得變量,並提供具體的程式碼範例。首先,我們需要寫一個PHP檔案來處理Ajax請求,並傳回所需的變數。下面是一個簡單的PHP檔案getData.php的範例程式碼:

深入了解PHP:JSON Unicode轉中文的實作方法 深入了解PHP:JSON Unicode轉中文的實作方法 Mar 05, 2024 pm 02:48 PM

深入了解PHP:JSONUnicode轉中文的實作方法在開發中,我們經常會遇到需要處理JSON資料的情況,而JSON中的Unicode編碼在一些場景下會為我們帶來一些問題,特別是當需要將Unicode編碼轉換為中文字元時。在PHP中,有一些方法可以幫助我們實現這個轉換過程,以下將介紹常用的方法,並提供具體的程式碼範例。首先,讓我們先來了解一下JSON中Un

PHP 與 Ajax:建立動態載入內容的解決方案 PHP 與 Ajax:建立動態載入內容的解決方案 Jun 06, 2024 pm 01:12 PM

Ajax(非同步JavaScript和XML)允許在不重新載入頁面情況下新增動態內容。使用PHP和Ajax,您可以動態載入產品清單:HTML建立一個帶有容器元素的頁面,Ajax請求載入資料後將資料加入到該元素中。 JavaScript使用Ajax透過XMLHttpRequest向伺服器傳送請求,從伺服器取得JSON格式的產品資料。 PHP使用MySQL從資料庫查詢產品數據,並將其編碼為JSON格式。 JavaScript解析JSON數據,並將其顯示在頁面容器中。點選按鈕觸發Ajax請求,載入產品清單。

PHP 與 Ajax:提升 Ajax 安全性的方法 PHP 與 Ajax:提升 Ajax 安全性的方法 Jun 01, 2024 am 09:34 AM

為了提升Ajax安全性,有幾種方法:CSRF保護:產生令牌並將其傳送到客戶端,在請求中新增至伺服器端進行驗證。 XSS保護:使用htmlspecialchars()過濾輸入,防止惡意腳本注入。 Content-Security-Policy頭:限制惡意資源加載,指定允許載入腳本和樣式表的來源。驗證伺服器端輸入:驗證從Ajax請求接收的輸入,防止攻擊者利用輸入漏洞。使用安全Ajax函式庫:利用jQuery等函式庫提供的自動CSRF保護模組。

如何使用 PHP 函數處理 JSON 資料? 如何使用 PHP 函數處理 JSON 資料? May 04, 2024 pm 03:21 PM

PHP提供了以下函數來處理JSON資料:解析JSON資料:使用json_decode()將JSON字串轉換為PHP數組。建立JSON資料:使用json_encode()將PHP陣列或物件轉換為JSON字串。取得JSON資料的特定值:使用PHP數組函數存取特定值,例如鍵值對或陣列元素。

See all articles