【问题标题】:How can I use $.ajax success data in somewhere else? [duplicate]如何在其他地方使用 $.ajax 成功数据? [复制]
【发布时间】:2012-12-19 19:24:36
【问题描述】:

可能重复:
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 函数之外)

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

【问题讨论】:

  • 你不能因为请求是异步的(除非你让它同步,这会阻塞你的脚本)。您必须将该行移入成功处理程序。
  • 我不完全确定您所追求的模式,但您也可以在函数中返回 ajax 调用,然后在任何地方使用 func().done(...)

标签: javascript jquery ajax


【解决方案1】:

如果您只是想在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 调用放在成功回调中。

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多