如何使用jquery proxy()将参数传递给已有其他参数的函数

时间:2014-08-03 16:06:54

标签: javascript jquery parameter-passing

根据要求,我已将代码更新为我的具体问题:

function A(){
    this.data1 = null;
    this.data2 = null;
}
A.prototype.receiveData1AndData2FromServer = function(callback){
    this.doneCallback = $.proxy( function foo(importantData, callback){
        this.data1 = importantData.data1;
        this.data2 = importantData.data2;
        callback != undefined ? callback() : null;
    }, this, callback);

    checkFail = $.proxy(
        function (jqXHR, textStatus, errorThrown) {
            try {
                var str = new String(jqXHR.responseText);
                var result = JSON.parse(str.substring(str.indexOf('{')));
                this.doneCallback(result);
            } catch (ex) { console.log(ex); }
        }
    , this);
    $.ajax({
        type: 'POST', url: 'get_data1_and_data2.php', data: { 'id': this.id }, dataType: 'json'
    }).done(this.doneCallback)
    .fail(checkFail);
    }

(问题是callback参数正在替换第一个参数(importantData)而不是第二个参数。)

对A :: receiveData1AndData2FromServer的调用具有不同的回调参数。 我想将回调传递给A :: doneCallback,所以当检索完成后,将调用正确的回调。

2 个答案:

答案 0 :(得分:0)

您的问题不是很明确,但jQuery.proxy()支持自版本1.6以来的多个参数

答案 1 :(得分:0)

经过深思熟虑,我找到了解决方案。 将context参数拆分为具有多个字段(上下文和所需参数)的对象已经解决了它。我希望它对其他人有用。

function A(){
    this.data1 = null;
    this.data2 = null;
}
A.prototype.receiveData1AndData2FromServer = function(callback){
    this.doneCallback = $.proxy( function foo(importantData, callback){
        this.context.data1 = importantData.data1;
        this.context.data2 = importantData.data2;
        this.callback.callback != undefined ? this.callback() : null;
    }, {context:this, callback:callback});

    checkFail = $.proxy(
        function (jqXHR, textStatus, errorThrown) {
            try {
                var str = new String(jqXHR.responseText);
                var result = JSON.parse(str.substring(str.indexOf('{')));
                this.doneCallback(result);
            } catch (ex) { console.log(ex); }
        }
    , this);
    $.ajax({
        type: 'POST', url: 'get_data1_and_data2.php', data: { 'id': this.id }, dataType: 'json'
    }).done(this.doneCallback)
    .fail(checkFail);
}