Así que estoy tratando de lograr lo siguiente, pero no puedo encontrar la manera de hacer que esto funcione.
$.ajax({ url: "whatever.php", method: "POST", data: { myVar: "hello" }, success: function(response) { console.log('received this response: '+response); console.log('the value of myVar was: '+data.myVar); // <<<< data.myVar is not accessible from here console.log('the value of myVar was: '+myVar); // <<<< myVar is not accessible from here } }); ¿Hay alguna forma de acceder al valor de myVar en la función .success() ? ¿Puedo llegar de alguna manera al objeto data original que se envió en esta solicitud ajax, en la función .success() ?
Esperando sus soluciones. ¡Gracias!
Puede usar this para acceder a todo el objeto. Así que puedes hacer algo como esto:
$.ajax({ url: "whatever.php", method: "POST", data: { myVar: "hello" }, success: function(response) { console.log('received this response: '+response); console.log('the value of myVar was: '+this.data.myVar); } });Todas las demás respuestas, excepto la de Piyin, no son confiables y son una mala práctica.
Las solicitudes AJAX son, por su propia naturaleza, asincrónicas. Eso significa que para cuando la respuesta regrese del servidor, la variable que establecieron puede haber cambiado. Si desea un ejemplo, solo haga dos botones que activen el mismo código, pero establezca myData en un valor diferente, y haga clic en cada uno de ellos rápidamente antes de que la respuesta regrese ... ahora la variable ha cambiado y no será confiable. resultados.
La respuesta de Piyin también es buena, pero a veces obtienes diferentes formatos de los datos enviados. Puede ser un objeto JSON que ha sido stringify , puede estar en formato GET con cadenas de consulta, etc.
La forma más fácil en el codificador (aunque crea un poco más de sobrecarga en la RAM) es asignar una nueva propiedad del objeto AJAX y acceder a ella en la devolución de llamada, así (usando el ejemplo de Piyin):
var dataToSend = { myVar: "hello" }; $.ajax({ url: "whatever.php", method: "POST", data: dataToSend, sentData: dataToSend, //add this property success: function(response) { console.log('received this response: ' + response); console.log('the value of myVar was: '+ this.sentData.myVar); //access sentData property } });Simplemente almacene los datos que está publicando en una variable primero.
var data = {myVar: "hello"} $.ajax({ url: "whatever.php", method: "POST", data: data, success: function(response) { console.log('received this response: '+response); console.log('the value of myVar was: '+data.myVar); } });