AJAX:同时有两个请求

时间:2013-02-06 10:44:00

标签: java jquery html ajax servlets

我正在使用JSP& amp;开发一个Web应用程序。的servlet。

我是AJAXJQuery的新手。

我使用以下代码<{1}}向jsp页面发送了两个请求:

servlet

第一个填充html $(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); }); }); } 中的值,第二个设置数据库中该记录的combobox值。每次都会填充Combobox,但每次都不会设置该特定记录的值,有时在组合框中加载数据之前会执行combobox

我的代码中有什么问题吗?还是有更好的方法来做到这一点......

提前致谢....

3 个答案:

答案 0 :(得分: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);
            });
        });
}

答案 1 :(得分: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
    }
);

答案 2 :(得分:1)

AJAX意味着&#34;异步Javascript&#34;是的,因此请求将是异步的,这意味着将无法保证首先执行哪一个。对于你的情况,你需要一个同步操作(一个调用应该在另一个调用之后,它们不是彼此独立的)所以

尝试将您的代码更改为:

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

这将确保仅在填写复选框后才调用setSalutation