javascript函數 - javascript object callback



通過包含參數的回調函數? (2)

這個問題在這裡已經有了答案:

我有下面的代碼

function getGrades(grading_company) {

    if (grading_company == 'Not Specified') {

        // Remove grades box & show condition box
        showConditionBox();

    } else {

        // Set file to get results from..
        var loadUrl = "ajax_files/get_grades.php";

        // Set data string
        var dataString = 'gc_id=' + grading_company;

        // Set the callback function to run on success
        var callback = showGradesBox;

        // Run the AJAX request
        runAjax(loadUrl, dataString, callback);  

    }

}

function runAjax(loadUrl, dataString, callback) {

    jQuery.ajax({
        type: 'GET',
        url: loadUrl,
        data: dataString,
        dataType: 'html',
        error: ajaxError,
        success: function(response) {
            callback(response);
        }
    });    

}

編輯:這是作為回調函數被調用的函數:

function showGradesBox(response) {

    // Load data into grade field
    jQuery('#grade').html(response);

    // Hide condition fields
    jQuery('#condition').hide();
    jQuery('#condition_text').hide();

    // Show grade fields
    jQuery('#grade_wrapper').show();
    jQuery('#grade_text_wrapper').show();    

}

現在,如果我想將grading_company變量作為參數傳遞給回調函數,有沒有辦法做到這一點,而不必將其作為runAjax調用中的另一個參數? 我試圖保持runAjax函數打開其他用法,所以我不想傳入任何額外的參數; 但如果它可以以某種方式包含在回調中,那麼很好。


將您的回撥改為匿名功能:

// Set the callback function to run on success
var callback = function () {
    showGradesBox(grading_company);
};

這使您可以將參數傳遞給內部函數。

編輯:允許ajax響應:

// Set the callback function to run on success
var callback = function (response) {
    showGradesBox(grading_company, response);
};

另一種可能性是,而不是做dataString do dataObject然後傳遞該對像到回調。 像這樣:

function getGrades(grading_company) {

    if (grading_company == 'Not Specified') {

        // Remove grades box & show condition box
        showConditionBox();

    } else {

        // Set file to get results from..
        var loadUrl = "ajax_files/get_grades.php";

        // Set data object
        var dataObject = {
            'gc_id' : grading_company
            /*to do multiples..
            'item1' : value1, 
            'item2' : value2, 
            'etc' : etc */
        }

        // Set the callback function to run on success
        var callback = showGradesBox;

        // Run the AJAX request
        runAjax(loadUrl, dataObject, callback);  

    }

}

function runAjax(loadUrl, dataObject, callback) {

    jQuery.ajax({
        type: 'GET',
        url: loadUrl,
        data: $.param(dataObject),
        dataType: 'html',
        error: ajaxError,
        success: function(response) {
            callback(response, dataObject);
        }
    });    

}

請注意添加$.param()

然後在回調函數中,你應該知道你後面的數據。 如果function setGrades(resp, data) { ... }是回調,那麼您可以訪問setGrades的值

function setGrades(resp, data) {
   alert( data.gc_id);
}

編輯

經過測試,我意識到$(dataObject).serialize()將無法正常工作。 所以我已經更新使用$.param() 。 請參閱此SO帖子了解更多信息。





callback