0

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

しかし、done関数はそれをキャッチしていないようです63(または数値が何であれ)

これがキャッチです。

dogsタグが存在しないと仮定しましょう:

1)データベースに/tags/add?tagName=dogs追加dogsされ、ID が返されます64

2)console.log(data)doneイベントブロック内の最初の行で行うと、ログに記録されます0(タグが存在しない場合のデフォルトID)

dogs3)タグをデータベースに再度追加しようとすると、既に存在する/tags/add?tagName=dogsことがわかり、その ID ( )dogsのみが返されます。64

4)その後console.log(data)、再び開始し、ログに記録します64

なぜそれが起こっているのですか?

4

1 に答える 1

0

問題は、ajax の非同期性にありました。

doneブロックの外側でサーバーの応答を正しく取得するために必要だったのは、asyncfalse に設定することだけでした。

    if(!key) {
        $.ajax({
            async: false,
            url: "/tags/add",
            type: "GET",
            data: {tagName:value}
        }).done(function(data){
            key = data;
        });
    }
于 2013-06-05T14:43:36.827 に答える