当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何让jQuery将自定义参数传递给异步AJAX回调函数?》经验,为你挑选了1个好方法。

我的页面处理许多"商店"对象,每个对象都有一个名为"数据"的字段.但是,这些数据是通过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将用于两个不同的存储,即使它们具有相同的查询参数.

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



1> Marc Gravell..:

你应该能够使用闭包:

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

你是这个意思吗?

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有