4

可能重复:
从 jquery ajax 调用
返回 jQuery:ajax 调用成功后返回数据

        $.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 函数之外)

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

4

1 回答 1

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 调用放在成功回调中。

于 2013-01-05T14:33:47.087 回答