0

内包するjs関数から値を返すにはどうすればよいですか? 私は次の例を試しましたが、うまくいきません (それは私を返します:

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変数を取得できますか? ありがとう。

4

2 に答える 2

2

コードによると、2 番目のパラメーターで関数を渡す必要がありますが、代入を返しています (これは "true" に相当します)。失敗します。

代わりに、次のようにします。

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をご覧ください。

于 2012-05-05T04:17:33.190 に答える
1

ajax 関数から取得したデータを返すことはできません。代わりに、ajax 関数が成功した後に呼び出される関数を割り当てる必要があります。

于 2012-05-05T04:16:03.963 に答える