J'ai ce code ci-dessous ..
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: Voici la fonction qui est appelée comme fonction de rappel:
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();
}
Maintenant, si je voulais passer le grading_company
variable à la fonction de rappel en tant que paramètre existe-t-il un moyen de le faire sans avoir à l'ajouter comme autre paramètre dans l'appel runAjax
? J'essaie de garder la fonction runAjax
ouverte à d'autres utilisations, donc je ne veux pas passer de paramètres supplémentaires; mais si cela peut en quelque sorte être inclus dans le rappel, alors tant mieux.
changez votre rappel en fonction anonyme:
// Set the callback function to run on success
var callback = function () {
showGradesBox(grading_company);
};
Cela vous permet de passer des paramètres à la fonction interne.
Edit: pour permettre la réponse ajax:
// Set the callback function to run on success
var callback = function (response) {
showGradesBox(grading_company, response);
};
Une autre possibilité est au lieu de faire dataString
do dataObject
puis de passer cet objet au rappel. Ainsi:
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);
}
});
}
Notez l'ajout de $.param()
.
Ensuite, dans la fonction de rappel, vous devez savoir quelles données vous recherchez. Si function setGrades(resp, data) { ... }
était le rappel, alors vous pouvez accéder aux valeurs dans setGrades
function setGrades(resp, data) {
alert( data.gc_id);
}
[~ # ~] modifier [~ # ~]
Après les tests, je me rends compte que $(dataObject).serialize()
ne fonctionnera pas. J'ai donc mis à jour pour utiliser $.param()
. Veuillez voir this SO post pour plus d'informations.