Jquery get()需要2次传球?

时间:2013-09-08 00:03:20

标签: javascript jquery symfony

使用jquery&在Symfony应用程序中的ajax,按钮单击旨在检索实体的几个属性。第一次单击该按钮将返回undefined;进一步点击检索预期值。如何第一次得到它?

脚本片段:

    $("#contact_household_button").click(function() {
        var houseId = $("#contact_household").val();
        if (houseId !== "") {
            var url = "/app_dev.php/household/contact/" + houseId;
            $.get(url, function(data) {
                $("#household_store").data(data);
            })
            var household = $("#household_store");
            var head = household.data('head');
            alert(houseId + ": " + head);
        }
    });

get()提供的示例响应:

  

{“id”:8607,“head”:“Some Person”}

首先点击产量

  

8607:未定义

2 - n点击产量

  

8607:某人

1 个答案:

答案 0 :(得分:1)

$.get 异步

这意味着,当请求成功获取响应时,其回调函数将在以后的某个时间执行 $.get调用下面的代码同步执行,它不等待异步操作完成。

必须在$.get回调内执行/调用依赖于通过$.get异步检索的数据的代码:

        $.get(url, function(data) {
            $("#household_store").data(data);
            //got response, now you can work with it
            var household = $("#household_store");
            var head = household.data('head');
            alert(houseId + ": " + head);
        });

如果您愿意,也可以使用$.Deferred兼容的jqXHR方法附加回调:

        $.get(url).done(function(data) {
            $("#household_store").data(data);
            //got response, now you can work with it
            var household = $("#household_store");
            var head = household.data('head');
            alert(houseId + ": " + head);
        });

我想你可能已经想到为什么你现在需要“2次点击”它才能工作,但无论如何,这里是你发布的代码的执行流程(段落表示同步块,Ajax请求开始/结束的缩进):

>>>点击按钮
>>>发送Ajax请求
>>>由于尚未收到响应,警报未定义

>>> 将来几毫秒从Ajax调用接收响应,设置元素数据

>>>再次点击按钮
>>>再次发送Ajax请求 >>>使用先前请求中的数据集

>>> 稍后从请求接收数据,设置元素数据