DWR对javascript变量的响应

时间:2014-08-27 09:10:12

标签: java javascript ajax jsp dwr

几个星期前我已经问过这个问题,但是没有人能帮助我。

这对我来说非常重要,而且它仍然没有任何可行的解决方案。

在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值放入变量并在其他函数中使用它。

有人可以帮助我吗?

由于

1 个答案:

答案 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)。