我正在努力完全理解回调,我在最后的障碍中磕磕绊绊。
在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变量。
感谢任何帮助
答案 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);
}
}
);
}