使用包含的参数传递回调函数?

我有以下代码..

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() 。 有关详细信息,请参阅此SOpost 。