This question already has an answer here:
这个问题已经有了答案:
- Pass an extra argument to a callback function 4 answers
- 将一个额外的参数传递给回调函数4
I have this below code..
我有下面的代码。
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);
}
});
}
Edit: Here is the function that gets called as the callback function:
这个函数被称为回调函数:
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();
}
Now if I wanted to pass the grading_company
variable to the callback function as a parameter is there a way to do that without having to add it as another parameter in the runAjax
call? I'm trying to keep the runAjax
function open to other usage so I don't want to pass in any extra parameters; but if it can somehow be included within the callback then great.
现在,如果我想将grading_company变量作为参数传递给回调函数,有没有一种方法可以做到这一点而不需要在runAjax调用中添加它作为另一个参数?我试图保持runAjax函数对其他用途开放,所以我不想传递任何额外的参数;但是如果它可以包含在回调中,那就太棒了。
2 个解决方案
#1
43
change your callback to an anonymous function:
将回调更改为匿名函数:
// Set the callback function to run on success
var callback = function () {
showGradesBox(grading_company);
};
This allows you to pass parameters to the inner function.
这允许您将参数传递给内部函数。
Edit: to allow for the ajax response:
编辑:允许ajax响应:
// Set the callback function to run on success
var callback = function (response) {
showGradesBox(grading_company, response);
};
#2
2
Another possibility is instead of doing dataString
do dataObject
then pass that object to the callback. Like so:
另一种可能是不执行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);
}
});
}
Note the addition of $.param()
.
注意添加了$.param()。
Then in the callback function, you should know what data you're after. If function setGrades(resp, data) { ... }
was the callback, then you can access the values in setGrades
然后在回调函数中,你应该知道你想要的是什么数据。如果函数设置为(resp, data){…}是回调,然后您可以访问setGrades中的值
function setGrades(resp, data) {
alert( data.gc_id);
}
EDIT
编辑
After testing, I realize that $(dataObject).serialize()
will not work. So I've updated to use $.param()
. Please see this SO post for more info.
在测试之后,我意识到$(dataObject).serialize()不能工作。因此我更新了使用$.param()。更多信息请点击这里。
#1
43
change your callback to an anonymous function:
将回调更改为匿名函数:
// Set the callback function to run on success
var callback = function () {
showGradesBox(grading_company);
};
This allows you to pass parameters to the inner function.
这允许您将参数传递给内部函数。
Edit: to allow for the ajax response:
编辑:允许ajax响应:
// Set the callback function to run on success
var callback = function (response) {
showGradesBox(grading_company, response);
};
#2
2
Another possibility is instead of doing dataString
do dataObject
then pass that object to the callback. Like so:
另一种可能是不执行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);
}
});
}
Note the addition of $.param()
.
注意添加了$.param()。
Then in the callback function, you should know what data you're after. If function setGrades(resp, data) { ... }
was the callback, then you can access the values in setGrades
然后在回调函数中,你应该知道你想要的是什么数据。如果函数设置为(resp, data){…}是回调,然后您可以访问setGrades中的值
function setGrades(resp, data) {
alert( data.gc_id);
}
EDIT
编辑
After testing, I realize that $(dataObject).serialize()
will not work. So I've updated to use $.param()
. Please see this SO post for more info.
在测试之后,我意识到$(dataObject).serialize()不能工作。因此我更新了使用$.param()。更多信息请点击这里。