2012-05-23 32 views
0

我已經分配了一個涉及很多jQuery的項目。我用它很容易,但以前的開發人員使用了下面的代碼,這對我來說是全新的,我不知道它的功能。瞭解jquery和ajax

$.extend({ 
    ay: { 
     ajaxRequest: { 
      abort: function(){} 
     } 
    } 
}); 

我可以告訴大家,ay是所有項目的配置文件和模板是目錄名。任何人都可以解釋這段代碼嗎?由於

我也看到了這個代碼項目:

$.ay.ajaxRequest = $.ajax({ 
    data: { 
     ay: { 
      action: 'update', 
      element: { 
       id: $(this).data().id 
      }, 
      input: { 
       name: $(this).attr('name'), 
       value: $(this).val() 
      } 
     } 
    }, 
    type: 'post' 
});​ 

在此示例代碼,不存在URL或路徑PHP腳本,你能解釋一下這個呢?

+0

ay絕對不是目錄名稱。 – user1032531

+0

它肯定是我的朋友.... – jugnu

回答

1

該代碼將一個名爲ay的屬性添加到jQuery對象($)中,使代碼(如$.ay.ajaxRequest.abort())成爲可能。

如果您傳遞一個參數來擴展該參數,它將自行擴展jQuery名稱空間。 這意味着參數的每個屬性將被克隆到jQuery對象。在你的情況下,有一個名爲ay的屬性被克隆到jQuery對象。調用與具有一個屬性的對象延伸等於

$.ay = { 
      ajaxRequest : {...} 
     }; 
4

他用jQuery.extend()擴展jQuery來添加一個ay屬性,它是一個ajaxRequest屬性,它是一個abort屬性,是另一個對象的對象一個空的函數(noop)。

所以你可以做;

jQuery.ay.ajaxRequest.abort(); 

如果你願意,那絕對不會做任何事情。

至於爲什麼這是有用的;你必須檢查代碼的其餘部分,看看他在哪裏調用它。

有關擴展jQuery的更多信息,請參閱the docs

編輯:爲了解決第二個部分,如果他伸出的jQuery你看到代碼之前,那麼他在更換ajaxRequestjQuery.ajax()返回的jqXHR。如果他在該代碼之後擴展了jQuery,那麼他將覆蓋abort()方法而不做任何事情;基本上沒有人能夠取消AJAX請求。

使用jQuery.extend()做,這是很奇怪的,我會做:

jQuery.ay.ajaxRequest.abort = jQuery.noop; 

他必須宣告URL使用jQuery.ajaxSetup()是AJAX請求(設置AJAX默認)。

+1

在一個幽默的事後,這對於完全沒有任何事情是很多工作。 –

+0

'$ .ay.ajaxRequest \t = $就({ 數據:{ AY:{ 動作: '更新', 元件:{ ID:$(本)。數據()。ID }, 輸入:{ 名稱:$(本).attr( '名稱'), 價值:$(本).VAL() }} } , 類型: '後' }) ;' 在這個示例代碼中,沒有url或者php腳本的路徑,你能解釋一下嗎? – jugnu

+0

只有動作更新? ajax呼叫將如何轉到該參與者更新操作? – jugnu