0

很长一段时间以来,我一直在努力解决这个问题,我试图在第二个 ajax 调用之后从第一个 ajax 调用中附加对象。但是 for 循环似乎在附加信息之前将值的更改迭代到最后一个结果,每次都附加最后一个帖子。

    var scribjson = 
{
    "user_id" : localStorage.viewing,
};
scribjs = JSON.stringify(scribjson);
var scrib = {json:scribjs};
$.ajax({
    type: "POST",
    url: "getScribbles.php",
    data: scrib,
    success: function(result)
    {     
        var obj = jQuery.parseJSON(result);
        for(var i = 0; i < obj.length; i+=1)
        {   
            var userjson = 
            {
                "user_id" : obj[i].user_id
            };
            userjs = JSON.stringify(userjson);
            var user = {json:userjs};
            localStorage.post = obj[i].post;
            $.ajax({
                type: "POST",
                url: "getRequestsInfo.php",
                data: user,
                success: function(result)
                {     
                    var obj2 = jQuery.parseJSON(result);
                    $('#listOfScribbles').append("<tr><td><img id = 'small_pic' src = '" + obj2[0].profileImage + "'/></td><tr><td>" + obj2[0].firstname + " " + obj2[0].lastname + "</td></tr> ");
                    $('#listOfScribbles').append("<tr><td>" + obj[i].post + "</td></tr>");
                },
                error: function()
                {
                    alert('An Error has occured, please try again.');
                }
            });

        }
    },
    error: function()
    {
        alert('An Error has occured, please try again.');
    }
});
4

2 回答 2

0

使用 IIFE:

success: (function(i){return function(result) {
    var obj2 = jQuery.parseJSON(result);
    $('#listOfScribbles').append("<tr><td><img id = 'small_pic' src = '" + obj2[0].profileImage + "'/></td><tr><td>" + obj2[0].firstname + " " + obj2[0].lastname + "</td></tr> ");
    $('#listOfScribbles').append("<tr><td>" + obj[i].post + "</td></tr>");
}})(i),

等等。目前,您的循环生成的 ajax 成功处理程序包含对计数器本身的直接引用,该计数器(在调用它们时)已达到其最终值。

于 2012-10-22T12:21:30.610 回答
0

由于 ajax 调用 看起来success内部 ajax 调用的所有函数都在循环结束后被调用,所以i总是最后一个迭代值。

试试这个:

(function(i)
{

    $.ajax({
        type: "POST",
        url: "getRequestsInfo.php",
        data: user,
        success: function(result)
        {     
            var obj2 = jQuery.parseJSON(result);
            $('#listOfScribbles').append("<tr><td><img id = 'small_pic' src = '" + obj2[0].profileImage + "'/></td><tr><td>" + obj2[0].firstname + " " + obj2[0].lastname + "</td></tr> ");
            $('#listOfScribbles').append("<tr><td>" + obj[i].post + "</td></tr>");
        },
        error: function()
        {
            alert('An Error has occured, please try again.');
        }
    });
})(i);

这将在 上创建一个闭包i,这将为每个 ajax 调用提供其自己的当前值副本。

于 2012-10-22T12:26:32.147 回答