繁体   English   中英

如何让jQuery将自定义参数传递给异步AJAX回调函数?

[英]How to get jQuery to pass custom arguments to asynchronous AJAX callback functions?

我的页面处理许多“商店”对象,每个对象都有一个名为“数据”的字段。 但是,这些数据是通过AJAX请求获取的,这些请求可以并行进行。

function Store(id){
    this.id = id;
    this.queryparam = 'blah';
    this.items = null;
}

Store.prototype.fetch = function(){
    $.get("/get_items",{q:this.quaryparam},function(data,status){

      // how to store the received data in this particular store object? Being
      // a callback function, I don't have a reference to this object as 'this'

       // this.data = data; //will not work
    });
}

在回调函数中,我尝试为调用对象定义一个默认参数,如下所示:

$.get("/get_items",{q:this.quaryparam},function(data,status, ref = this) ...

但事实证明,javascript不支持这样的默认参数值。 我可以以某种方式让jquery在回调函数中传递对'this'存储的引用吗?

我想到了其他几种方法,但没有一种方法可行:

我可以使用同步请求设置商店数据,但那不是AJAX的重点,是吗?

对我来说另一种方法是,也可以在响应中返回的请求中发送商店ID。 例如:

// in Store.fetch()
$.get("/get_items",{q:this.quaryparam,id:this.id},function(responsetext,status){
    var response = eval(responsetext);
    stores[response.id].data = response.data;
});

我不喜欢这种方法,因为这会污染响应只是因为客户端代码无法跟踪哪个对象发送了哪个请求。

此外,由于store.id是特定于客户端的,因此它也会破坏服务器上的缓存。 不同的请求URL将用于两个不同的存储,即使它们具有相同的查询参数。

有没有其他方法可以实现我想要的?

你应该能够使用闭包:

var tmp = this;
$.get("/get_items",{q:this.quaryparam},function(data,status){
    tmp.data = data;
});

你是这个意思吗?

function Store(id){this.id = id; this.queryparam ='blah'; this.items = null; }

Store.prototype.fetch = function(){
    var that = this;
    $.get("/get_items",{q:this.quaryparam},function(response){
        that.callback(response)
    });
}

Store.prototype.callback = function(response){
    // and here you can use
   this.items = response // just example
}

似乎工作,虽然我不明白如何在匿名函数内访问变量'tmp'。 :-)

谢谢Marc和ricardoe!

我写了这个插件,我觉得它会很有用

http://code.google.com/p/jquerycallback/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM