¿Por qué no se puede acceder al parámetro de la llamada Ajax principal en la llamada Ajax secundaria?
Recupero datos de la base de datos utilizando una llamada ajax. En mi código no puedo acceder al “parámetro” de la solicitud de llamada ajax padre a la llamada ajax secundaria. Puedo ver un error en la consola. Puedo intentar poner “async: false” en la solicitud secundaria pero usando “async” puedo acceder al parámetro pero la llamada ajax secundaria solo funciona una vez.
A continuación se muestra mi código:
$.ajax({
type: "GET",
url: "/url",
data: {acId: acId, pstId: pstId},
success: function(res) {
// res.lenth = 2
for (var i = 0; i < res.length; i++) {
$.ajax({
type: "GET",
url: "/url",
data: {commentId: res[i].comment_id},
success: function(likeornot) {
if (likeornot == 0) {
$("#btnlikeornot").append(
"<button type='submit' onclick='btncommentunlike(" + res[i].comment_id + ")' id='commentunlikebtn" + res[i].comment_id + "' data-id='" + res[i].u_id + "' class='comment-like-button-style'>" +
"<img src='https://img.icons8.com/material-outlined/24/000000/like--v1.png'>" +
"</button>"
);
} else {
$("#btnlikeornot").append(
"<button type='submit' onclick='btncommentlike(" + res[i].comment_id + ")' id='commentlikebtn" + res[i].comment_id + "' data-id='" + res[i].u_id + "' class='comment-like-button-style'>" +
"<img src='https://img.icons8.com/material-rounded/24/fa314a/like.png'>" +
"</button>"
);
}
}
});
}
}
});
Error:
imagezoom.js:68 Uncaught TypeError: No se pueden leer las propiedades de undefined (lectura de 'comment_id')
at Object.success (imagezoom.js:68)
at i (jquery.min.js:2)
at Object.fireWith [as resolveWith] (jquery.min.js:2)
at A (jquery.min.js:4)
at XMLHttpRequest.<anonymous> (jquery.min.js:4)
davy.ai
El error se produce debido a que
res[i]
no está disponible en la solicitud ajax secundaria ya que se realiza de forma asíncrona. Una forma de solucionar esto sería pasarres[i]
como parámetro a la solicitud ajax secundaria para que esté disponible en la función de éxito.Al envolver la solicitud ajax secundaria en una función anónima y pasar
res[i]
como parámetro a esa función, hacemos quecomment
esté disponible en la función de éxito de la solicitud ajax secundaria.