【问题标题】:AJAX: Two requests at the same timeAJAX:同时两个请求
【发布时间】:2013-01-21 12:46:59
【问题描述】:

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

所以我的代码有什么问题吗?或者有没有更好的方法来做到这一点......

提前谢谢....

【问题讨论】:

  • 不胜感激的理由

标签: java jquery html ajax servlets


【解决方案1】:
    $(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);
            });
        });
}

【讨论】:

  • @Patik Bhatt 感谢(和 +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
    }
);

【讨论】:

  • 感谢(和 +1)的回答,所有三个答案都解决了我的问题。
【解决方案3】:

AJAX 的意思是“异步 Javascript”,所以请求将是异步的,这意味着无法保证哪个会先执行。对于你的情况,你需要一个同步操作(一个调用应该在另一个调用之后,它们不是相互独立的)所以

尝试将您的代码更改为:

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

这将确保 setSalutation 仅在复选框被填满后被调用。

【讨论】:

  • 感谢(和 +1)的回答,所有三个答案都解决了我的问题。
猜你喜欢
  • 2011-11-28
  • 2012-03-30
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 2013-03-19
相关资源
最近更新 更多