Javascript回调 - 如何返回结果?

时间:2011-06-23 11:28:07

标签: javascript callback

我正在努力完全理解回调,我在最后的障碍中磕磕绊绊。

在JS中我调用一个函数,然后使用dojo rpc Json服务调用PHP函数。我已经逐步完成了firebug中的函数并且PHP正在执行并通过回调返回正确的响应,但我不知道如何将值返回到调用JS函数的初始JS变量? E.g。

JS Function 1

Function one(){

Var test = getPhp(number);

}

function getPhp(number)
{

this.serviceBroker = new dojo.rpc.JsonService(baseUrl + '/index/json-rpc/');

    var result = serviceBroker.phpFunc(number);

    result.addCallback(
        function (response)
        {
            if (response.result == 'success')
            {
                return response.description;
               //I am trying to pass this value back to the 
               //var test value in   function one

            }
        }
    );
}

基本上我现在需要将response.description传递回函数1中的var test变量。

感谢任何帮助

3 个答案:

答案 0 :(得分:11)

这是不可能的,因为回调是异步运行的。这意味着getPhp函数在执行回调之前返回(这是回调的定义,也是异步编程很难的原因之一;-))。

您要做的是创建一个使用test变量的新方法。执行回调时需要调用此方法。

function one(result) {
  var test = result;
  // Do anything you like
}

function getPhp(number, callback) {
  this.serviceBroker = new dojo.rpc.JsonService(baseUrl + '/index/json-rpc/');
  result.addCallback(
    function (response)
    {
        if (response.result == 'success')
        {
           callback(response.description);
        }
    }
  );
}

getPhp(number, function(result) { one(result); });

这最后一个方法创建了一个传递给getPhp函数的“匿名函数”。该函数在响应到达时执行。这样,您可以在数据到达后将数据传递到one(number)函数

答案 1 :(得分:4)

简短的回答是,你不能。

对回调中的数据或从回调中调用的函数执行任何操作。你不能从中归还任何东西。

答案 2 :(得分:2)

更清洁的答案:

getPhp(number);

function one(data){
    var test = data;
    // do what you want
}

function getPhp(number)
{

    this.serviceBroker = new dojo.rpc.JsonService(baseUrl + '/index/json-rpc/');

    var result = serviceBroker.phpFunc(number);

    result.addCallback(
        function (response)
        {
            if (response.result == 'success')
            {
                one(response.description);
            }
        }
    );
}