2013-10-12 65 views
1
function chat() { 
    this.waittime = 6000; 
    this.intUpdate = null; 

    this.sendChatUpdate = function (msg) { 
     var Chatmsg = '0'; 
     if (msg > 0) { 
      Chatmsg = $('#chatmsg'); 
      var m = Chatmsg.val(); 
      Chatmsg.val(''); 
     } 

     var s = $("#chatnick").val(); 
     var r = $("#chatto").val(); 

     $.ajax({ 
      type: 'POST', 
      url: 'Chat/ajax/Chat.php', 
      data: { 
       S: s, 
       R: r, 
       M: m 
      }, 
      success: function (data) { 
       this.ProcessChatReturn(data); 
      }, 
      error: function (data) { 
       this.ProcessChatReturn(data); 
      } 
     }); 
    } 

    this.getUnreadChat = function (mr) { 
     var s = $("#chatnick").val(); 
     $.ajax({ 
      type: 'POST', 
      url: 'Chat/ajax/Chat.php', 
      data: { 
       S: s, 
       UR: 1, 
       MR: mr 
      }, 
      success: function (data) { 
       this.ProcessChatReturn(data); 
      }, 
      error: function (data) { 
       this.ProcessChatReturn(data); 
      } 
     }); 

     //clearTimeout(intUpdate); 
     $('#chatbox').show(); 
    } 
} 

var chat = new chat(); 
chat.getUnreadChat(); 

我收到错误“遗漏的类型错误:对象#有没有方法‘ProcessChatReturn’”jQuery函数混淆这个关键字

我认为这是因为如果使用“这个”内的jQuery的阿贾克斯呼吁。我想引用我的“聊天”对象,但我认为由于将它包含在jquery ajax函数中,它不是。

任何建议如何在该位置引用我的聊天对象?

回答

2

你不能那样做,因为this里面的ajax succes回调指向jqXHR对象而不是你的对象上下文。您可以改为将对象缓存到另一个变量并使用它。还有很多其他的方法。

this.sendChatUpdate = function (msg) { 
    var Chatmsg = '0'; 
    if (msg > 0) { 
     Chatmsg = $('#chatmsg'); 
     var m = Chatmsg.val(); 
     Chatmsg.val(''); 
    } 

    var s = $("#chatnick").val(); 
    var r = $("#chatto").val(), self = this; //Cache this to self. 

    $.ajax({ 
     type: 'POST', 
     url: 'Chat/ajax/Chat.php', 
     data: { 
      S: s, 
      R: r, 
      M: m 
     }, 
     success: function (data) { 
      self.ProcessChatReturn(data); //Invoke it with self 
     }, 
     error: function (data) { 
      self.ProcessChatReturn(data); //Invoke it with self 
     } 
    }); 
} 

你也可以利用context属性的ajax设置。

例:

$.ajax({ 
     type: 'POST', 
     url: 'Chat/ajax/Chat.php', 
     data: { 
      S: s, 
      R: r, 
      M: m 
     }, 
     context:this, //set the context here 
     success: function (data) { 
      this.ProcessChatReturn(data); //Invoke it with this 
     }, 
     error: function (data) { 
      this.ProcessChatReturn(data); //Invoke it with this 
     } 
    }); 

还有其他方面也一样结合使用Ecmascript5 function.bind$.proxy回调函数引用,但在你的情况,你可以避开那些。

。注意,函数内的上下文中是指给调用者的上下文中,或者在功能从调用换言之(除了在上语句中提到结合功能)。在你的情况下,你给ajax一个回调作为你的匿名func引用,并从jquery ajax对象中调用,所以默认情况下,上下文指向那个