2011-10-22 73 views
0

好吧,通常我有一個ajax請求包裝功能,我通過$數據和$sucessFunctionA並執行$.ajax請求。中間的javascript:包裝功能到ajax請求後執行主要功能

但我想要做的是另一個功能:$successFunctionB這需要$sucessFunctionA作爲參數。

所以我通過$數據和$successFunctionB$.ajax請求。

假設這是一個成功的結果。 $successFunctionB執行。 $successFunctionB檢查數據結果的值。如果它是一個確定的值,那麼它將執行$successFunctionA。 可能令我困惑的是,對於ajax請求的sucessFunction只能有一個參數作爲輸入結果數據。

這裏是我想要做的

function ajaxCall($data,$successFunctionA) 
{ 

var $successFunctionB = function($data,$successFunctionA) 
{ 
       data = jQuery.parseJSON($data); 
       if(data.result=='good') 
       { 
        $successFunctionA(data); 
       } 
} 

$.ajax(
    { 
     type:'POST', 
     url:'server.php', 
     datatype:'json', 
     data:$data, 
     success:$successFunctionB, 
    }); 

} 

回答

1

斷碼你並不需要通過$ successFunctionA至$ successFunctionB - 函數B將因爲在JavaScript訪問功能A,功能是關閉。因此,代碼看起來就像這樣:

function ajaxCall($data,$successFunctionA) 
{ 
    var $successFunctionB = function($data) 
    { 
     data = jQuery.parseJSON($data); 

     if(data.result=='good') 
     { 
      $successFunctionA(data); 
     } 
    }; 

    $.ajax(
    { 
     type:'POST', 
     url:'server.php', 
     datatype:'json', 
     data:$data, 
     success:$successFunctionB, 
    }); 
} 

這是在JS中最重要的概念之一,所以如果你不熟悉的倒閉我會建議他們讀了起來:http://blog.morrisjohns.com/javascript_closures_for_dummies

0

如果您使用的jQuery 1.6或更大,可以$.proxy施加部分參數:

$.ajax(
{ 
    type:'POST', 
    url:'server.php', 
    datatype:'json', 
    data:$data, 
    success:$.proxy($successFunctionB, this, $successFunctionA) 
}); 

第一個參數是要執行的功能,第二個是this指針的背景。任何後續參數將傳遞給$successFunctionB函數。最後,$.ajax通話將追加其自己的數據作爲最後一個參數,所以你應該重新排序是這樣的:

var $successFunctionB = function($successFunctionA, $data) 
+0

感謝傢伙...非常有幫助:) – stone