estoy tratando de aprender ajax con jquery pero hay algo que no entiendo. Como puede ver en el código a continuación, cuando llamamos a la función onSuccess, no toma argumentos, pero la función en sí toma la respuesta. El código está funcionando, pero ¿cómo y por qué? y si quiero enviar otro parámetro a la función de éxito, ¿cómo lo hago?
$.ajax({ type: "POST", //getListOfCars is my webmethod url: "WebService.asmx/getListOfCars", data: jsonData, contentType: "application/json; charset=utf-8", dataType: "json", // dataType is json format success: OnSuccess, error: OnErrorCall }); ****function OnSuccess(response) { console.log(response.d) }****una forma de usar otro parámetro es definirlos primero y estar en el mismo ámbito
function ajaxCaller(){ var useable= 'my inject'; $.ajax( ... sucess: successListener ) var successListener = function(data){ console.log(data); console.log(useable); // can access here because the scope is given } }la devolución de llamada de ajax está definida por corrección SuccessListener (datos, texto de estado, jqXHR) y no puede inyectar algún parámetro dentro de esta estructura para mi conocimiento.
una cosa es posible. agregue los parámetros que necesita a su objeto de datos e ignórelo por su api. de lo que puede acceder al objeto jqXHR que contiene los parámetros solicitados.
success: function(data, text, jqXHR)Parece que podría estar confundiendo el acto de llamar a una función y pasar la referencia a una función. Considere el siguiente código:
function plusOne(inputParam) { return inputParam + 1; } var value = plusOne(6) // value = 7 function funcCaller(callback){ var cbValue = poCallback(99); return cbValue; } var value2 = funcCaller(plusOne); // value2 = 100Aquí tienes una función llamada plusOne , que simplemente suma 1 al parámetro que le diste y lo devuelve. El valor de la variable se establece en el valor de 7 porque llamó a la función plusOne con un parámetro de 6 pasado. Esto es lo que espera cuando llama a una función.
Después de eso, declara una nueva función que toma en su parámetro otra función (a menudo denominada función de devolución de llamada). Todo lo que hace funcCaller es llamar a cualquier parámetro que le haya pasado con un valor predeterminado de 99 y devolver la respuesta. Ahora, en la última línea, la variable value2 se establece en 100. Esto se debe a que llama a la función funcCaller y le pasa una referencia a plusOne , tenga en cuenta que no llama a plusOne sino que solo pasa su referencia como parámetro a funcCaller . Ahora funcCaller llama a plusOne con 99 y obtiene 100 como respuesta, que luego regresa a value2 .
Entonces aquí notará que en su última línea acaba de pasar plusOne sin ningún parámetro, pero aún así fue llamado con un parámetro de 99 eventualmente. Entonces, en jquery ajax, esencialmente está sucediendo algo como esto, después de que termina de recibir una respuesta de su POST, llama a la función que pasó con su propio conjunto de parámetros, en particular: Función (datos, estado de texto, jqXHR)
En mi experiencia con las funciones/devoluciones de llamada de javascript, si no especifica los parámetros, entonces javascript simplemente se encarga de eso por usted. si cambiaste tu código a este aunque:
$.ajax({ type: "POST", //getListOfCars is my webmethod url: "WebService.asmx/getListOfCars", data: jsonData, contentType: "application/json; charset=utf-8", dataType: "json", // dataType is json format success: OnSuccess(true), error: OnErrorCall(false)});
Entonces simplemente pasará lo que le digas y no completará el objeto de respuesta. Si desea pasar más parámetros, debe agregar parámetros a sus controladores de devolución de llamada de éxito y error. Puede pasarlos explícitamente o jquery podría pasarles objetos. Además, recuerde que jquery está llamando a estos controladores en segundo plano, solo está especificando el nombre de la función a la que llama jquery.