在jQuery中将对象传递给回调函数

桑耶夫

我最近正在研究小型聊天模块,该模块需要不断检查服务器是否有新消息。

我正在向服务器发送ajax请求,并且服务器保持连接状态,直到找到新消息为止(长时间轮询)。

代码 :

var chatController = function(){
 
//other variable declaration

/**
*  Ajax call to monitor the new message , on complete of ajax call sending other call
*/

this.checkNewMessage = function(){
  console.log(this); // placed this for debugging purpose
       $.ajax({
         url : SITEURL.CHECK_MESSAGE,
         data : this.currrentUserDetails,
         dataType : 'json' ,
         cache    : false,
         success  :(function(obj){
            //temp = obj;
            return obj.parseNewMessageResponse;
         })(this),
         complete: (function(obj){
            //temp = obj;
            return obj.checkNewMessage;
         })(this),  
       });
       
     
};

  // other function and variable

});

当我尝试打电话时

var mainController = new chatController();
mainController.checkNewMessage();

问题

我以为我可以将连续的单个请求发送到服务器,但是令我惊讶的是,我只能一个接一个地发送2个a​​jax请求。

我的调试

当我尝试调试时,我找出了this传递给第一个调用对象的点,该点指向chatController

         complete: (function(obj){
            return obj.checkNewMessage;
         })(this),     // this here point to chatController object
         
         

第二次this传递的对象指向ajax object

         complete: (function(obj){
            return obj.checkNewMessage;
         })(this),     // this here point to ajax object

我正在使用JavaScript闭包将chatController对象传递completejquery的参数

所以我想要的是将参数传递给jQuery complete函数的方法,以便它指向我的原始引用

疯狂

有各种可能的解决方案

您可以使用$.proxy

我认为这是最佳做法。

$.ajax({
    //...
    success: $.proxy(function(json) {
         // `this` refers to the second argument of `$.proxy`
    }, this)
});

您可以设置context选项

$.ajax({
    //...
    context: this,
    success: function(json) {
         // `this` refers to the value of `context`
    }
});

或使用闭包

var self = this;
$.ajax({
    //...
    success: function(json) {
         // `this` refers to ajax request, use self instead
         $(self).dosomething();
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在jQuery中将对象传递给回调函数

来自分类Dev

如何将对象传递给rxjs subscription()回调函数?

来自分类Dev

如何将对象传递给rxjs subscription()回调函数?

来自分类Dev

将'this'对象传递给$ http服务的'then'回调函数

来自分类Dev

c ++:将对象传递给函数

来自分类Dev

将对象传递给PowerShell函数

来自分类Dev

将对象传递给函数方法

来自分类Dev

将对象传递给jQuery.on()

来自分类Dev

将对象传递给jQuery.on()

来自分类Dev

如何将对象传递给另一个模型的回调?

来自分类Dev

如何将“此”对象传递给使用协议的函数中调用的回调函数

来自分类Dev

在动态生成的html中将对象传递给javascript函数

来自分类Dev

在AngularJS中将对象传递给$ http POST

来自分类Dev

将对象传递给函数调用中的函数

来自分类Dev

Javascript-如何将原始对象传递给回调函数

来自分类Dev

Javascript-如何将原始对象传递给回调函数

来自分类Dev

将类似文件的对象传递给ctypes回调

来自分类Dev

如何在Delphi中将对象方法作为回调方法传递给C ++ dll

来自分类Dev

正在通过引用将对象传递给构造函数

来自分类Dev

如何通过引用将对象传递给构造函数

来自分类Dev

将对象传递给Lua函数始终引用自身

来自分类Dev

如何将对象传递给单独的函数-Python

来自分类Dev

无法将对象传递给Typescript中的构造函数

来自分类Dev

将对象传递给R中的generate()评估的函数

来自分类Dev

如何将对象传递给CasperJS函数

来自分类Dev

将对象传递给函数或子过程

来自分类Dev

如何将对象传递给 std::accumulate 函数?

来自分类Dev

jQuery如何将对象传递给另一个函数

来自分类Dev

将对象传递给jQuery .each()(而不是函数)会导致错误

Related 相关文章

  1. 1

    在jQuery中将对象传递给回调函数

  2. 2

    如何将对象传递给rxjs subscription()回调函数?

  3. 3

    如何将对象传递给rxjs subscription()回调函数?

  4. 4

    将'this'对象传递给$ http服务的'then'回调函数

  5. 5

    c ++:将对象传递给函数

  6. 6

    将对象传递给PowerShell函数

  7. 7

    将对象传递给函数方法

  8. 8

    将对象传递给jQuery.on()

  9. 9

    将对象传递给jQuery.on()

  10. 10

    如何将对象传递给另一个模型的回调?

  11. 11

    如何将“此”对象传递给使用协议的函数中调用的回调函数

  12. 12

    在动态生成的html中将对象传递给javascript函数

  13. 13

    在AngularJS中将对象传递给$ http POST

  14. 14

    将对象传递给函数调用中的函数

  15. 15

    Javascript-如何将原始对象传递给回调函数

  16. 16

    Javascript-如何将原始对象传递给回调函数

  17. 17

    将类似文件的对象传递给ctypes回调

  18. 18

    如何在Delphi中将对象方法作为回调方法传递给C ++ dll

  19. 19

    正在通过引用将对象传递给构造函数

  20. 20

    如何通过引用将对象传递给构造函数

  21. 21

    将对象传递给Lua函数始终引用自身

  22. 22

    如何将对象传递给单独的函数-Python

  23. 23

    无法将对象传递给Typescript中的构造函数

  24. 24

    将对象传递给R中的generate()评估的函数

  25. 25

    如何将对象传递给CasperJS函数

  26. 26

    将对象传递给函数或子过程

  27. 27

    如何将对象传递给 std::accumulate 函数?

  28. 28

    jQuery如何将对象传递给另一个函数

  29. 29

    将对象传递给jQuery .each()(而不是函数)会导致错误

热门标签

归档