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
dodataObject
,而是将该对象传递给回调。像这样:
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()
<代码>序列化()
在我使用它的上下文中不起作用。