在ajax调用中更改全局变量

时间:2012-10-22 12:08:14

标签: javascript ajax json

我一直试图将这个问题做好一段时间,我试图在第二次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.');
    }
});

2 个答案:

答案 0 :(得分: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成功处理程序包含对计数器本身的直接引用,当它们被调用时已达到其最终值。

答案 1 :(得分:0)

因为ajax调用看起来在循环结束后调用内部ajax调用的所有success函数,所以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调用它自己的当前值副本。