variable alcance no establecido en ajax callback [duplicado]
function canDeleteFacilitator(facilitatorId, handleData) {
var call = $.ajax({
type: 'GET',
url: urls.candeletefacilitator,
data:{facilitatorId: facilitatorId}
}).done(function (data) {
return handleData(data);
})
}
var canDeleteText = "";
canDeleteFacilitator(facilitator.value, function (canDelete) {
console.log(canDelete);
if (canDelete == true) {
canDeleteText = '';
}
})
console.log(canDeleteText);
canDeleteText no se establece dentro de la función callback. ¿Cómo corrijo este alcance?
Pregunta hecha hace 3 años, 5 meses, 0 días - Por techwizkid
3 Respuestas:
-
No lo eres. regresando cualquier cosa en su función .. Usted también debe establecer el
var
dentro el alcance de la función a menos que usted va a pasar en ... Así.canDeleteFacilitator(facilitator.value, function (canDelete) { var canDeleteText = ""; console.log(canDelete); if (canDelete == true) { canDeleteText = ''; } return canDeleteText; })
En esencia,
canDeleteText
debe permanecer dentro de la función .. Y si quieres ponerlo fuera de la función, necesitarás establecerte como un Regreso de la función:var canDeleteText = canDeleteFacilitator( callbacks );
Así que un uso práctico sería establecerlo como una función, fuera del get-go:
function canDeleteFacilitator(canDelete) { var canDeleteText = ""; console.log(canDelete); if (canDelete == true) { canDeleteText = ''; } return canDeleteText; } var canDeleteText = canDeleteFacilitator(1); // I set it to "true" just to pass the if console.log(canDeleteText);
Respondida el Dec 16, 2020 a las 17:20 - por codecraftsman
Votos positivos: 0 | Votos negativos: 0 -
En este caso, el problema es que estás tratando de acceder a la variable
canDeleteText
fuera del callback de la funcióncanDeleteFacilitator
, donde intentas modificar su valor. La razón por la quecanDeleteText
no se establece dentro de la función callback es debido al alcance de las variables en JavaScript.Una solución sería mover la lógica que depende de la variable
canDeleteText
dentro del callback de la funcióncanDeleteFacilitator
. De esta manera, aseguras quecanDeleteText
se establece correctamente una vez que se obtiene la respuesta de la petición AJAX.Aquí te dejo un ejemplo de cómo podrías modificar tu código:
javascript function canDeleteFacilitator(facilitatorId, handleData) { var call = $.ajax({ type: 'GET', url: urls.candeletefacilitator, data: { facilitatorId: facilitatorId } }).done(function (data) { handleData(data); }); } canDeleteFacilitator(facilitator.value, function (canDelete) { console.log(canDelete); var canDeleteText = ""; if (canDelete == true) { canDeleteText = ''; } console.log(canDeleteText); });
De esta forma, la variable
canDeleteText
se establecerá correctamente dentro del callback y podrás acceder a su valor actualizado.Respondida el Dec 17, 2020 a las 17:16 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema del código que proporcionaste es que la variable
canDeleteText
se define fuera de la función de devolución de llamada AJAX, por lo que la función no puede acceder a ella ni modificarla.Para resolver este problema, puedes definir
canDeleteText
dentro de la función de devolución de llamada, como se muestra a continuación:javascript var canDeleteText = ""; canDeleteFacilitator(facilitator.value, function (canDelete) { console.log(canDelete); if (canDelete == true) { canDeleteText = ''; } console.log(canDeleteText); // Imprime el valor actualizado de canDeleteText });
Al definir
canDeleteText
dentro de la función de devolución de llamada, la variable se declara dentro del alcance de la función y la función puede acceder a ella y modificarla.Ahora, la consola imprimirá el valor actualizado de
canDeleteText
después de que se complete la llamada AJAX. También puedes acceder acanDeleteText
desde fuera de la función de devolución de llamada una vez que se haya actualizado.Respondida el Dec 17, 2020 a las 17:29 - por Gemini
Votos positivos: 0 | Votos negativos: 0