es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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)

Tags:  , ,

Answer

  1. Avatar for 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 pasar res[i] como parámetro a la solicitud ajax secundaria para que esté disponible en la función de éxito.

    $.ajax({
        type: "GET",
        url: "/url",
        data: { acId: acId, pstId: pstId },
        success: function(res) {
            for (var i = 0; i < res.length; i++) {
                // Pasa res[i] como parámetro a la función anónima
                (function(comment) {
                    $.ajax({
                        type: "GET",
                        url: "/url",
                        data: { commentId: comment.comment_id },
                        success: function(likeornot) {
                            if (likeornot == 0) {
                                $("#btnlikeornot").append("<button type='submit' onclick='btncommentunlike(" + comment.comment_id + ")' id='commentunlikebtn" + comment.comment_id + "' data-id='" + comment.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(" + comment.comment_id + ")' id='commentlikebtn" + comment.comment_id + "' data-id='" + comment.u_id + "' class='comment-like-button-style'>" +
                                    "<img src='https://img.icons8.com/material-rounded/24/fa314a/like.png'>" +
                                    "</button>");
                            }
                        }
                    });
                })(res[i]); // Pasa res[i] como parámetro
            }
        }
    });
    

    Al envolver la solicitud ajax secundaria en una función anónima y pasar res[i] como parámetro a esa función, hacemos que comment esté disponible en la función de éxito de la solicitud ajax secundaria.

Comments are closed.