如何在其他地方使用$ .ajax成功数据?

时间:2013-01-05 14:22:52

标签: javascript jquery ajax

  

可能重复:
  return from jquery ajax call
  jQuery: Return data after ajax call success

        $.ajax({
            url:"list.php",
            dataType: "json",
            success: function(resp){
                for(var i=0;i<resp.length;i++){
                    $('#goods_list').append(
                      "<h3>" + resp[i]["name"] + "</h3>"
                      +
                      "<div>Price: NT$" + resp[i]["price"] + "<br />"
                      +
                      resp[i]["description"]
                      +
                      "<hr /> <a href=# alt='"+ resp[i]["sn"]+ "' class='add_to_cart'>Add</a> | More"
                      +"</div>"
                    );
                }

                var resp2 = resp;
            }
        });

        $('body').append(resp2[0]["price"]);

FireBug说:

ReferenceError: resp2 is not defined
$('body').append(resp2[0]["price"]);

如何在其他地方使用$.ajax成功数据? (在$ .ajax函数之外)

这个概念类似于“全局变量”。

1 个答案:

答案 0 :(得分:0)

如果您只想使用success回调之外的响应内容,则应在方法之外声明您的变量:

var resp2;
$.ajax({
    url:"list.php",
    dataType: "json",
    success: function(resp){

        for(var i=0;i<resp.length;i++){

            $('#goods_list').append(
            "<h3>" + resp[i]["name"] + "</h3>"
            +
            "<div>Price: NT$" + resp[i]["price"] + "<br />"
            +
            resp[i]["description"]
            +
            "<hr /> <a href=# alt='"+ resp[i]["sn"]+ "' class='add_to_cart'>Add</a> | More"
            +"</div>"
            );

        }

        var resp2 = resp;
    }
});

无论如何,你必须记住,很可能,几乎可以肯定,$ .ajax调用之后的代码将在成功回调之前执行。它会发生,因为这是一个异步调用。浏览器将执行$ .ajax调用,并等待第二个线程中的响应,在发送请求之后,将执行下一个语句(在您的代码中,.append调用)。

为了完成你想要的,你应该把.append调用放在你的成功回调中。