问题 将回调函数传递给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);

但我无法让它像上面那样从传入的参数中获取函数名称。


10685
2018-01-06 18:37


起源

您不能将字符串作为函数传递,但如果它在对象文字中,您可以使用括号表示法,或者如果它是全局的,您可以使用 window[callback] 引用全局范围中的变量,并分配函数而不是使用函数decleration。 - adeneo
另一方面,在查看它之后,只需从ajax函数返回promise,并使用 done() 会更简单,就像这样 - > JSBIN - adeneo
@adeneo所以那只会成功吗? - Brett
Yupp !!!!!!!!!!! - adeneo


答案:


showGradesBox 是代码中的字符串。所以你有两个选项来执行回调函数:

如果你想保留你可以使用的字符串

this[callback](response);

(如果 callback 在全局范围内定义,您也可以使用 window[callback](response);

或者您可以直接传递函数:

var callback = showGradesBox;

(在这种情况下,您可以保留现有的代码以执行回调)


14
2018-01-06 18:41