valores valor una retorno retornar pasar parametro otra funciones funcion ejemplos como codigos javascript jquery ajax callback

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.