java - DWR 对 JavaScript 变量的响应

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

有人可以帮助我吗?

谢谢

最佳答案

这不起作用,因为它是异步处理。当结果从服务器返回时,您的函数将稍后被调用。此时,您的上下文早已不复存在。

当异步编程(如使用 DWR)时,您必须从特定的处理顺序中抽象出来。考虑回调(好吧,我不会在这里开始讨论 promise 等)。就像,“这就是结果返回时应该发生的情况”。

在您的第二个示例中,这将类似于:

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);
});

重要的是,您必须在 success 回调中处理结果(例如 alert(currentDataStatus))。

关于java - DWR 对 JavaScript 变量的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25523153/

相关文章:

Java 8 并行流或方法执行

javascript - 当 Mysql 数据库更改状态时使用 Push.js 推送通知

javascript - 把滚动条的bar放在最下面

Javascript 跟踪函数数据

javascript - ajax响应后执行soundmanager2

jQuery 和 AJAX?

java - 接口(interface)设计: Method that takes a single input and returns many outputs

java - 使用 hibernate : psql: could not connect to server: Connection refused

java - 在条件sqlite数据库中使用OR语句

javascript - 使用ajax更改不同页面范围内的内容