javascript - 尽管使用有效参数调用,但设置方法未设置成员

标签 javascript oop

我因为这段代码而感到沮丧:

    function Model(){
       this.GetAjaxData = function(){ 
          //private Member to be returned
          var res;

          function setRes(newVal){
             res = newVal;
             alert(newVal); // to verify its really being called
          }

          // calls a Ajax-Service(1st param) with the given arguments(2nd param),
          // the 3rd param is a function with gets called back, commiting the 
          // output of the Ajax-Service as arguments for the called function
          tw.coach.callService(
             "GetServerTime", 
             "<inputs><variable name='input1' type='String'>lala</variable></inputs>", 
             function(arg){ setRes(arg['Result']); }
          );

          return res;
       };
    }

现在,一旦模型的实例被初始化并且方法被调用如下:

    var _model = new Model();
    document.getElementById("myDiv").innerHTML = _model.GetAjaxData();

警报弹出并显示预期数据(Ajax 服务仅返回 {Result: this came via Ajax.})但 myDiv 包含 undefined。这告诉我 setRes() 被正确调用,但它只是没有设置 res 的值。

我也不知道为什么。

最佳答案

考虑到 AJAX 请求的异步性质,改变您的方法:

function Model() {
    this.GetAjaxData = function(callback) {
        var data = "<inputs><variable name='input1' type='String'>lala</variable></inputs>";
        tw.coach.callService("GetServerTime", data, function(arg) {
            callback(arg['Result']);
        });
    };
}​

var _model = new Model();
_model.GetAjaxData(function(res) {
    document.getElementById("myDiv").innerHTML = res;
});

关于javascript - 尽管使用有效参数调用,但设置方法未设置成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13083977/

相关文章:

javascript 函数声明和作用域差异

javascript - 有没有一种方法可以在不使用 Javascript 中的 new 关键字的情况下从 ArrayBuffer 创建 TypedArray?

oop - 分层对象设计(Java)

java - HashMap 到 txt 文件 - 在 Java OOP 中写入键和值

PHP 函数/方法返回 bool 结果和状态消息

javascript - 控制行长 d3.js

javascript - 如何制作带有刻度标记 html5 的 "playback" slider ?

javascript - javascript中的行是什么意思

java - 继承DatabaseManager类或使其成为单例对象来实现DAO模式哪个更好?为什么?

java - 如何在同一类中的静态方法中抛出异常