2

JSPとサーブレットを使用してWebアプリケーションを開発しています。

私はとに不慣れAJAXですJQuery

次のコードを使用して、自分のjspページから2つのリクエストを送信しています。servlet

$(document).ready(function()
{
        var $ul = $(SALUTATION);
        $.get('MyServletName?action=cmbSALUTATION', function(responseJson) 
        {
            $.each(responseJson, function(index, item)
            { 
                $('<option>').text(item).appendTo($ul);
            });
        });
        setValSALUTATION(); 
});

function setValSALUTATION()
{
        $.get('ProfileContactsMain?action=cmbSALUTATIONValue', function(responseJson)
        {
            $.each(responseJson, function(index, item) 
            {
            $("#SALUTATION").val(item);
            });
        });
}

1つ目はhtmlの値を入力しcombobox、2つ目comboboxはデータベースからそのレコードの値を設定します。コンボボックスは毎回入力されますが、その特定のレコードの値は毎回設定されるわけではなくsetValSALUTATION()、データがコンボボックスにロードされる前に実行される場合があります。

だから私のコードに何か問題がありますか?またはこれを行うためのより良い方法はありますか....

前もって感謝します....

4

3 に答える 3

2
    $(document).ready(function()
    {
            var $ul = $(SALUTATION);
            $.get('MyServletName?action=cmbSALUTATION', function(responseJson) 
            {
                $.each(responseJson, function(index, item)
                { 
                    $('<option value=' + item +'>').text(item).appendTo($ul);
                });
 setValSALUTATION(); 
            });

    });

function setValSALUTATION()
{
        $.get('ProfileContactsMain?action=cmbSALUTATIONValue', function(responseJson)
        {
            $.each(responseJson, function(index, item) 
            {
            $("#SALUTATION").val(item);
            });
        });
}
于 2013-02-06T10:46:06.047 に答える
2

リクエストは非同期であるため、最初のリクエストが完了した後に2番目のリクエストを行う必要があります。これを行うには、次のように、関数呼び出しを最初のリクエストのコールバックに入れます。

$.get(
    'MyServletName?action=cmbSALUTATION', 
    function(responseJson) {
        $.each(responseJson, function(index, item) { 
            $('<option>').text(item).appendTo($ul);
        });
        setValSALUTATION(); // Note: inside callback, so it will execute 
                            // once DOM is in the proper state
    }
);
于 2013-02-06T10:46:20.163 に答える
1

AJAXは「非同期Javascript」の権利を意味するため、リクエストは非同期になります。つまり、どちらが最初に実行されるかは保証されません。そして、あなたの場合、同期操作が必要です(一方の呼び出しはもう一方の呼び出しの後に続く必要があり、それらは互いに独立していません)。

コードを次のように変更してみてください。

$.get('MyServletName?action=cmbSALUTATION', function(responseJson) 
{
   $.each(responseJson, function(index, item)
   { 
      $('<option>').text(item).appendTo($ul);
   });
   setValSALUTATION(); 
});

これによりsetSalutation、チェックボックスが入力された後にのみ呼び出されるようになります。

于 2013-02-06T10:49:17.627 に答える