我正在使用jQuery $ .ajax将数据即时添加到我的数据库中。
服务器端返回最近添加的元素的ID,我想在完成的事件块中捕获它。
if(!key) {
$.ajax({
url: "/tags/add",
type: "GET",
data: {tagName:value}
}).done(function(data){
key = data;
});
}
/ tags / add返回:
return new Response($tags[0]->getId(), 200, array('Content-Type' => 'text/html'));
其中Response是特定于框架的。
如果我转到URL / tags / add?tagName = 123
如果该标记不存在,它将尝试将该标记添加到数据库中。如果成功,它将返回其id。
在上面的示例中,返回63
但是完成函数似乎没有捕获63
(或者无论数字是什么)
这是一个问题。
我们假设标签dogs
不存在:
1)/tags/add?tagName=dogs
会将dogs
添加到数据库,并返回ID 64
2)如果我在完成事件块内的第一行中console.log(data)
,它将记录0
(标签不存在时的默认ID)
3)如果我再次尝试将dogs
标记添加到数据库,/tags/add?tagName=dogs
会看到dogs
已经存在,并且只会返回其ID(64
)
4)然后console.log(data)
再次启动,并记录64
知道为什么会这样吗?
答案 0 :(得分:0)
问题在于ajax的异步性质。
我需要做的就是在done
块之外正确捕获服务器响应是将async
设置为false。
if(!key) {
$.ajax({
async: false,
url: "/tags/add",
type: "GET",
data: {tagName:value}
}).done(function(data){
key = data;
});
}