如有一个menu类
function Menus()
{
this.language = null;
this.parentid = 0;
this.source = null;
}
Menus.prototype.getSource = function(){
$.ajax({
   type: "POST",
   url: "codebase/menusource.asp",
   data: "language="+this.language+"&parentid="+this.parentid,
   success: function(msg){
  var source = eval(msg)  
  //在这里要怎么做 才能把 source 赋值给 Menus.source
                 //也许大家会使用 new 一个全局的实例 M1,再把 source 赋值给 M1.source;
                //如果不这样用有其他方法吗?
   }
});
 
}

解决方案 »

  1.   

    Menus.source
    是属于对象Menus的属性
    不是属于其对象的属性
    直接写就行了吧
    Menus.source = source;
      

  2.   

    function Menus(){
        this.language = null;
        this.parentid = 0;
        this.source = null;
    }
    Menus.prototype.getSource = function(){
        var obj = this;
        $.ajax({
            type: "POST",
            url: "codebase/menusource.asp",
            data: "language="+this.language+"&parentid="+this.parentid,
            success: function(msg){
                var source = eval(msg);
                obj.source = source;
            }
        });
    }
      

  3.   


    //按照1楼的方法直接把返回值赋值给 Menus.source = source;
    //然后按照下面的测试了下,*.source 的值还是没有更新到。
    var m1 = new Menus()
    m1.getSource()
    alert(m1.source) ;
      

  4.   

    试用了 2楼 的方法,
    var m1 = new Menus()
    m1.getSource()
    alert(m1.source) ; // 值还是NULL ,没有更新到
      

  5.   

    <Script>
    function Menus()
    {
    this.language = null;
    this.parentid = 0;
    this.source = null;
    }
    Menus.prototype.getSource = function(){
    var obj = this;
    obj.source = "aaa";
    }var s = new Menus();s.getSource();document.write(s.source); // 显示 aaa; 你用ajax,因为是异步,在得到数据之前,还是null, 我个认认为你应该加: async: false, 禁用异步, 再试。
    </script>
      

  6.   

    谢谢 7楼【xie_yanke】 
    禁用异步后 可以 等到新值了。
    我想确认个问题
    var s = new Menus();
    s.getSource();
    ---- code ---
    禁用异步后 ,程序是否 会在s.getSource();执行完毕后,才继续执行 s.getSource(); 后面的代码?
      

  7.   

    var s = new Menus();
    s.getSource(); //不禁用异步时,它会直接或同步先运行下一句。因此,下一句显示null. 如果禁用异步,这句将在执行完,得到错误,或正确数据后,才继续一下句。document.write(s.source);