web-dev-qa-db-ja.com

コールバック関数をjQueryに渡すAJAX成功関数

AJAX呼び出しが成功したときに実行する関数を渡そうとしていますが、「コールバックは関数ではありません」と表示されているため、機能していません。

例:

市外局番:

getGrades(var);    

JS:

function getGrades(grading_company) {

    // 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 showGradesBox(response) {

    // Code here...

}

function runAjax(loadUrl, dataString, callback) {

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

}

以下の行を関数名自体に置き換えると、次のように機能します。

callback(response);

しかし、渡されたパラメーターから関数名を取得する上記のように機能させることはできません。

11
Brett

showGradesBoxはコード内の文字列です。したがって、コールバック関数を実行するには2つのオプションがあります。

文字列を保持したい場合は、使用できます

_this[callback](response);
_

callbackがグローバルスコープで定義されている場合は、window[callback](response);も使用できます。

または、関数を直接渡すこともできます。

_var callback = showGradesBox;
_

(この場合、コールバック実行のために既存のコードを保持できます)

14
micha