1

在 Symfony 应用程序中使用 jquery 和 ajax,单击按钮旨在检索实体的几个属性。第一次单击按钮返回未定义;进一步点击检索预期值。第一次怎么获得?

脚本片段:

    $("#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":"某人"}

首次点击收益

8607:未定义

2 - n 点击收益

8607:某个人

4

1 回答 1

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 请求
>>> 使用上一个请求中的数据集

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

于 2013-09-08T00:32:27.880 回答