2011-10-22 72 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