使用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);
}
});
{“id”:8607,“head”:“Some Person”}
8607:未定义
8607:某人
答案 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请求
>>>使用先前请求中的数据集
>>> 稍后从请求接收数据,设置元素数据