$ .ajax中完成事件的范围

时间:2013-06-05 14:20:06

标签: jquery

我正在使用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

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

问题在于ajax的异步性质。

我需要做的就是在done块之外正确捕获服务器响应是将async设置为false。

    if(!key) {
        $.ajax({
            async: false,
            url: "/tags/add",
            type: "GET",
            data: {tagName:value}
        }).done(function(data){
            key = data;
        });
    }