2011-10-03 29 views
6

我有一套$.get()請求,我需要重構包含失敗回調。該請求是形式瞭解jQuery的jqXHR

$.get(url, 
     {}, 
     function(data) {//success, do work 
     //work 
     },'json');//or 'html' 

據jQuery的API的,我只需要添加一個jqHXR對象。所以,在我的情況,我相信我應該做的

var jqxhr = $.get(url, 
      {}, 
      function(data) {//success, do work 
      //work 
      },'json').error(function() { alert("error"); });//or 'html' 

我不明白,在the example第二成功回調的原因。我想這可能是爲了建立一個回調鏈。我想要錯誤執行錯誤,併成功執行成功。那麼,這是正確的嗎?

+0

頁面上的哪個示例?對不起,我找不到你指的是什麼。 –

+0

看起來像第三個代碼示例。 –

+0

當您點擊該頁面時,查找標題爲「The jqXHR Object」的部分。直接在該標題下面的示例是我所指的那個示例。 –

回答

11

我認爲這個例子中的第二個成功回調就是爲了說明,使用這種語法,您可以爲successerrorcomplete事件分配多個處理程序。在標準的jQuery .ajax()方法中,您只能爲每個事件分配一個處理程序。我想不出副手會需要多個處理程序的例子,但它似乎更清楚一點,更像是標準的jQuery成語使用

$.get('my_url.php') 
    .success(handlerOne) 
    .success(handlerTwo); 

,而不是

$.get('my_url.php', function(data, textStatus, jqXHR) { 
    handlerOne(data, textStatus, jqXHR); 
    handlerTwo(data, textStatus, jqXHR); 
}); 

在你的情況,但是,把你的$.get()報表轉換成$.ajax()可能更簡單也更簡潔。對於大多數jQuery程序員來說,$.ajax()語法可能更爲熟悉,而且由於您不需要其他語法中提供的特殊功能(多個處理程序,後處理請求處理程序分配),所以沒有理由不使用$.ajax()

$.ajax({ 
    url: url, 
    success: function(data) { 
     // success, do work 
    }, 
    error: function(data) { 
     // error, handle failure 
    }, 
    dataType:'json' 
}); 
+0

我同意,第二個選項更有意義。 –

+3

我發現像你這樣清晰的解釋往往很少見。 API文檔和官方網站傾向於對所有內容進行極端詳細的介紹,這些內容都有它的地位,但它們並沒有強調實用性,或者推薦的選項很明確。他們也傾向於抽象,沒有涵蓋足夠地面的例子。 – ahnbizcad

2

你使用的代碼應該沒問題。第二個成功只是另一個可以定義成功方法的地方。有些人使用jqxhr成功,而不是傳遞到$.get(),而其他人使用延遲對象的done處理程序來做同樣的事情。

+0

在javascript中處理事物的多種方式,而替代語法中的隱含沉默是爲我學習js最混亂的部分。 – ahnbizcad

+0

@gwho最好的解決方案是去源。通常情況下,文檔根本不夠 –

+1

由於元編程,我發現源代碼更令人困惑,並且出於同樣的原因,API解釋令人困惑。我認爲清除細節的良好清晰的例子,給你留下核心重要和最常見的方面是最容易被吸收的傳達信息的方式。這只是我的看法。我發現如果你可以閱讀源代碼,你已經足夠好了,不會對多種語法感到困惑。 – ahnbizcad