几周前我就提出了这个要求,但没有人能帮助我。
这对我来说非常重要,但目前还没有任何可行的解决方案。
在 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/