0

我有一个基本的集合,可以对准备好的文档进行提取:即:

message_list.fetch({

            success: function(){
                console.log('success');
                //render
                grid_view.render();
            },
            error: function(xhr, text, ajax){
                //set a column limit and retru
                console.log('retrying');
                urlParams.colLimit = true;
                $.ajax(this);
                return;
            },
            data: urlParams,
            processData:true
        });

这会从服务器中获取一个 json,该服务器正在使用 thrift 查询一个 hbase 表。对于某些帐户,hbase 中的数据集太大,内存不足并返回 500 响应。所以我想在添加新的查询参数后重新触发相同的 ajax 调用。查看 jquery .ajax 文档,它说要调用 $.ajax(this),但这是窗口对象。xhr 变量也有空的成功函数。如何使用相同的属性和成功/错误函数重新触发相同的 ajax 调用?

4

2 回答 2

0

这很容易——制作一个你可以存储并可以传回的对象:

var success_cb = function(){
    console.log('success');
    //render
    grid_view.render();
};

var error_cb = function(xhr, text, ajax){
    //set a column limit and retru
    console.log('retrying');
    urlParams.colLimit = true;
    $.ajax(this);
    return;
};

var fetch_options = {
        success: success_cb, 
        error: error_cb,
        data: urlParams,
        processData:true
}

message_list.fetch(fetch_options);

只要 与fetch_options两个回调函数在同一范围内定义,并且fetch_options可以在该范围之外访问,任何可以访问的东西都fetch_options可以将其用作.fetch.

于 2012-07-02T19:49:39.417 回答
0

使用 Function.bind 将回调绑定到所需的上下文:success_cb.bind(desired_context) Function.bind 是 ECMAScript 5,因此您可能需要为其添加 shim。一个类似的选项是使用 $.proxy:http ://api.jquery.com/jQuery.proxy/

于 2012-07-02T21:45:28.303 回答