2

我正在使用 JSP 和 Servlet 开发一个 Web 应用程序。

我是新手AJAXJQuery

我正在从我的jsp页面发送两个请求以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);
            });
        });
}

第一个填充 html 中的值combobox,第二个设置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

因为请求是异步的,所以您需要在第一个请求完成后发出第二个请求。为此,将函数调用放在第一个请求的回调中,如下所示:

$.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 回答