2012-05-05 121 views
0

如何從封閉js函數返回值? 我試過下面的例子,但它不工作(它返回我:。?。js封閉函數的返回值ajax

function executeCommand(data, func){     
$.ajax({ 
type: 'POST', 
url: SERVERPATH+'Commands/', 
data: data, 
success: func, 
dataType: 'json' 
});  
} 

function executeServiceOperation(data){ 
var result = null; 
executeCommand(data, 
result = (function(data,status){   
     if(status=='success'){         
     return data.result;  
     } 
     else return null;   
    })(data,status) 
); 
return result; 
} 

result爲空,每次我想這一點,因爲status我怎樣才能得到status變量感謝

回答

2

Acording你的代碼,你必須在傳遞一個函數第二個參數,但你正在返回一個任務(即我相當於「真」)。它會失敗。

代替,做這樣的事情:

executeCommand(data, function(data,status){ //function as second parameter  
    if(status=='success'){         
     return data.result;  
    } else { 
     return null; 
    }   
}); 

但是,它仍然是錯誤的。任何涉及AJAX的內容都是非同步的。因此你不能從中「返回」任何東西。你應該做的是在發生「成功」事件時傳遞迴調。

function executeServiceOperation(data, callbacks){ 

    //do some set-up stuff you want 

    executeCommand(data,function(data,status){   
     if(status === 'success'){        
      callbacks.success(data.result) //execute callback with result 
     } else { 
      callbacks.fail(null);  //execute fail callback, with null if necessary 
     }   
    }); 
); 

executeServiceOperation(data, { 
    success :function(result){ 
     //do something with result 
    }, 
    fail : function(){ 
     //do something as if it returned null 
    } 
}); 

上面這段代碼是用傳統的回調方式編寫的。你應該看看Deferred Objects「含糖」的代碼。

1

這是不可能回到你從AJAX功能獲取數據。在代替您必須指定一個Ajax的功能成功後,將被調用的函數。

+0

同意。請參閱http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/瞭解如何使用jQuery的Deferreds的一個很好的例子。 – robrich