快捷方法:jQuery.get()

(PS:這篇文章是官網 1.9版 API文件的非專業翻譯+個人意見,並且重新排版過)

快捷方法:jQuery.get()

使用HTTP GET 請求,載入伺服端資料。

語法:

jQuery.get( url [, data ] [, success(data, textStatus, jqXHR) ] [, dataType ] )
//version added: 1.0
  • url
    Type: String
    一個包含著請求要送達的URL的字串。
  • data
    Type: PlainObject or String
    會伴隨著請求送到伺服端的plain物件,或是字串。
  • success(data, textStatus, jqXHR)
    Type: Function()
    一個回呼函式,當請求成功時會被執行
  • dataType
    Type: String
    從伺服端傳回資料的預期型別。預設值:智能猜測(xml, json, script, or html).
這個快捷的Ajax函式同等於下面程式碼:
$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

sucess回呼函式會接收到一個傳回值作為參數,這個值可能會是XML根元素,本文字串,Javascript檔案,或是JSON物件,取決於回應的MIME類型。sucess回呼函式也會收的回應得本文狀態。

從jQuery1.5開始,sucess回呼函式也回傳入一個 "jqXHR"  物件 ( 在 jQuery 1.4中,傳入的物件是XMLHttpRequest 物件 ) 。然而,因為JSONP 與 跨網域GET請求並不使用XHR。在這些例子中,傳遞到sucess回呼函式的jqXHR與textStatus狀態會是未定義undefined。

(維克:在語法中:success(data, textStatus, jqXHR),其中sucess的三個參數就是上面講到的三個傳入值)

大部分在實作時,都會指定一個success處理程序。

$.get( "ajax/test.html", function( data ) {
  $( ".result" ).html( data );
  alert( "Load was performed." );
})

(上面)這個例子獲取請求的HTML片段,並將其插入在頁面上。

從jQuery1.5開始,所有的jQuery的Ajax方法返回XMLHttpRequest物件的一個超集。由$.get()傳回的  jQuery XHR物件,或者稱之為 "jqXHR",實作了Promise介面。讓它擁有了Promise介面的的屬性,方法,以及行為。(參考Deferred object以取得更多訊息)。jqXHR.done() (代表成功時), jqXHR.fail() (代表錯誤時), 以及jqXHR.always() (代表完成時,不論結果是成功或是失敗)方法接受一個函式參數,當請求終結時,該函式會被呼叫。關於這個函數接收的參數的詳細信息,請參考 $.ajax() 文件的 jqXHR Object 章節。

(維克:所謂的介面,就是定義了一些屬性,方法,以及行為的規範。實現了某個介面的意思是,他實現的介面所定義的屬性,方法,以及行為。譬如說上例。Promise介面定義了done()方法。而jqXHR物件實現了Promise介面,所以jqXHR會有一個done()方法==>jqXHR.done()  )

Promise介面也允許jQuery的Ajax方法,包含了$.get()可以在單一個請求中去串鍊多個.done(), .fail(), 以及.always()回呼函式。甚至可以在要求可能完成後指派這些回呼。假使請求已經完成,回呼會立即發發出。// Assign handlers immediately after making the request,

// and remember the jqxhr object for this request
var jqxhr = $.get( "example.php", function() {
  alert( "success" );
})
  .done(function() {
    alert( "second success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "finished" );
  });
 
// Perform other work here ...
 
// Set another completion function for the request above
jqxhr.always(function() {
  alert( "second finished" );
});

棄用通知:

在jQuery 1.5 中的jqXHR.success(), jqXHR.error(), 與jqXHR.complete()回呼函式,從jQuery 1.8版開始將會被棄用。為了讓你的程式碼準備好移除這些函式,使用jqXHR.done(), jqXHR.fail(), andjqXHR.always()來作為代替。

其他注意事項:

  • 由於瀏覽器的安全限制,大部分的"Ajax"請求都受到同源政策(same origin policy)的規範。不同網域,子網域或是協定的請求無法成功取得資料。
  • 如果一個jQuery.get()請求失敗,他將會默默的失敗,除非腳本中也呼叫了.ajaxError()方法。另外,從jQuery的1.5開始,透過jQuery.get()返回的jqXHR對象的.error()方法也可用於錯誤處理。
  • Script 與 JSONP 請求不受到同源政策的限制。

範例:

範例:請求 test.php 頁面,但忽略傳回的結果。

$.get( "test.php" );

範例:請求 test.php 頁面,並且傳送一些額外的資料。(依然忽略傳回資料)

$.get( "test.php", { name: "John", time: "2pm" } );

範例:傳送資料陣列到伺服端(依然忽略傳回資料)

$.get( "test.php", { "choices[]": ["Jon", "Susan"] } );

範例:Alert 由 test.php傳回的結果 (HTML 或是 XML, 依據傳回資料而定)

$.get( "test.php", function( data ) {
  alert( "Data Loaded: " + data );
});

範例:Alert  由test.cgi傳回的結果,包含了額外的data附載(HTML 或是 XML, 依據傳回資料而定)

$.get( "test.cgi", { name: "John", time: "2pm" } )
  .done(function( data ) {
    alert( "Data Loaded: " + data );
  });

範例:取得 test.php頁面的內容, 該內容以json格式傳回(<?php echo json_encode( array( "name"=>"John","time"=>"2pm" ) ); ?>),並且將它加到頁面中。

$.get("test.php",
   function(data){
     $('body').append( "Name: " + data.name ) // John
              .append( "Time: " + data.time ); //  2pm
   }, "json")

 
 

  按個讚!~支持本站!~

FB推薦載入中