Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传递包含参数的回调函数?_Javascript_Jquery_Ajax_Callback - Fatal编程技术网

Javascript 传递包含参数的回调函数?

Javascript 传递包含参数的回调函数?,javascript,jquery,ajax,callback,Javascript,Jquery,Ajax,Callback,我有下面的代码 function getGrades(grading_company) { if (grading_company == 'Not Specified') { // Remove grades box & show condition box showConditionBox(); } else { // Set file to get results from.. var loadU

我有下面的代码

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();    

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

现在,如果我想将
grading\u company
变量作为参数传递给回调函数,有没有一种方法可以做到这一点,而不必将其作为
runAjax
调用中的另一个参数添加?我试图让
runAjax
函数对其他用途开放,所以我不想传入任何额外的参数;但是如果它可以以某种方式包含在回调中,那就太好了。

将回调更改为匿名函数:

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();    

}
// 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()
。有关更多信息,请参阅。

在成功函数中,不要忘记检查回调是否为函数:if(typeof callback=='function'){callback(response);},因为可能您的回调函数未设置。。。通常回调函数是可选的+1-绑定是可选的(如果
showGradesBox
的参数顺序正确),那么我应该在哪里添加代码?在所有其他功能之外?无需将
showGradesBox
作为回调函数传入,然后还是。。。?不是100%我将如何使用它。@Brett代码将替换您当前的
var callback=showGradesBox
getGrades
函数中。@jbabey哦,好的,有意义。虽然当通过
runAjax
调用showGradesBox时,
showGradesBox
是否仍会收到发送给它的
响应
参数&这两个参数的接收顺序是什么?@jbabey嗯,我就是这样尝试的,似乎只是将
grading\u company
传递给函数,现在还不知道如何将ajax响应传递给它?这主意不错-谢谢!我已将答案更新为使用
$.param()
<代码>序列化()
在我使用它的上下文中不起作用。