这对我来说非常重要,而且它仍然没有任何可行的解决方案。
在ViewDwr中我有一个简单的方法,它通过给定的Id检查一些数据并返回状态为boolean。在javascript(jsp文件)中,我有类似的东西:
ViewDwr.checkData(id, function(data)
{
document.getElementById("status").innerHTML=data;
});
它运作良好。问题是我需要将数据添加到变量中。类似的东西:
var currentDataStatus;
ViewDwr.checkData(id, function(data)
{
currentDataStatus=data;
});
alert(currentDataStatus);
但在这种情况下它不起作用。我尝试任何组合,但我找不到任何有效的解决方案,将resposne值放入变量并在其他函数中使用它。
有人可以帮助我吗?
由于
答案 0 :(得分:2)
这不会起作用,因为它是异步处理。当结果从服务器返回时,稍后将调用function
。在这一点上,你的背景早已不复存在。
当异步编程时(如同DWR),您必须从特定的处理顺序中抽象出来。想想回调(好吧,我在这里赢得了承诺等)。比如,"这里是结果回来时应该发生的事情"。
在你的第二个例子中,这将是:
ViewDwr.checkData(id, function(data)
{
alert(data);
});
为什么你还需要一个变量?如果这是一个全局变量,那么无论如何这都不是一个好主意。否则,请考虑将其作为某个对象的属性。
var myObject = {};
ViewDwr.checkData(id, function(data)
{
myObject.currentDataStatus = data;
alert(myObject.currentDataStatus);
});
甚至更好,让你的对象更聪明:
var myObject = ...;
ViewDwr.checkData(id, function(data)
{
myObject.onDataChecked(data);
});
重要的是,您必须在alert(currentDataStatus)
回调中处理结果(例如success
)。