[英]Javascript callback - how to return the result?
我正在努力完全理解回调,我在最后的障碍中磕磕绊绊。
在JS中我调用一个函数,然后使用dojo rpc Json服务调用PHP函数。 我已经逐步完成了firebug中的函数并且PHP正在执行并通过回调返回正确的响应,但我不知道如何将值返回到调用JS函数的初始JS变量? 例如
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变量。
任何帮助表示赞赏
这是不可能的,因为回调是异步运行的。 这意味着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)
函数。
简短的回答是,你做不到。
对回调中的数据或从回调调用的函数执行任何操作。 你不能从它返回任何东西。
一个更清洁的答案:
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);
}
}
);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.