javascript - valor - ¿Pasar una función de devolución de llamada con los parámetros incluidos?
retornar valor de una funcion javascript a php (2)
Esta pregunta ya tiene una respuesta aquí:
Tengo este código a continuación ...
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);
}
});
}
Editar: Aquí está la función que se llama como la función de devolución de llamada:
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();
}
Ahora, si quisiera pasar la variable grading_company
a la función de devolución de llamada como parámetro, ¿hay alguna manera de hacerlo sin tener que agregarlo como otro parámetro en la llamada runAjax
? Estoy tratando de mantener la función runAjax
abierta para otros usos, así que no quiero pasar ningún parámetro adicional; pero si de alguna manera puede incluirse dentro de la devolución de llamada, entonces genial.
cambie su devolución de llamada a una función anónima:
// Set the callback function to run on success
var callback = function () {
showGradesBox(grading_company);
};
Esto le permite pasar parámetros a la función interna.
Editar: para permitir la respuesta ajax:
// Set the callback function to run on success
var callback = function (response) {
showGradesBox(grading_company, response);
};
Otra posibilidad es, en lugar de hacer dataString
do dataObject
, pasar ese objeto a la devolución de llamada. Al igual que:
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);
}
});
}
Tenga en cuenta la adición de $.param()
.
Luego, en la función de devolución de llamada, debe saber qué datos está buscando. Si la function setGrades(resp, data) { ... }
fue la devolución de llamada, entonces puede acceder a los valores en setGrades
function setGrades(resp, data) {
alert( data.gc_id);
}
EDITAR
Después de la prueba, me doy cuenta de que $(dataObject).serialize()
no funcionará. Así que he actualizado para usar $.param()
. Por favor vea esta publicación SO para más información.