超时时的Jquery.get行为?

时间:2012-11-22 06:12:03

标签: perl jquery mojolicious

我是网络编码的新手,最近一直在玩JQuery。我注意到了一些行为,并想知道它是否是正常行为以及处理它的最佳方式。

我正在简单地访问我的Web服务器,有时服务器可能需要几分钟才能返回其结果。我注意到我的服务器端代码被多次调用,在这种情况下'/ userprofile'最多可以被调用3次。

("li#user").click(function(){
    $.get('/userprofile',{partialrender: 'true' },
        function (data) {
          $("div#content").html(data); 
    });
});

所以我的问题是;

1)这是正常行为吗?和 2)如果是这样JQuery进行额外的调用或浏览器? 3)处理这个问题的好方法是什么?

我很欣赏问题3的答案可能很难,但是非常感谢任何帮助。

非常感谢。

更新:

谢谢大家,

好的,所以由于后端数据库很小,我不能用那个确切的调用产生问题,但我可以用另一个相同的调用。我在get之前发出了一个警报,只调用一次。我正在使用Mojolicious webframework,所以我想知道它是否可以与之相关?我正在使用Morbo网络服务器。

这是我的代码,表现出这种行为

("li#importDevice").click(function(){
    alert('import clicked');
    $.get('/importDevice',{device: 'corptest' },
       function (data) {
         $("div#content").html(data); 
   });
 })



sub importDevice {
  my $self = shift;
  my $res = "test";
  my $dir      = $self->session("dir");
  my ($debug, $log, $path, $upload) = createLogHandles($self);
  my %deviceEntry = device::getDeviceEntry($devicename);
  print "In Import   Device \n";
  return $self->redirect_to('failed') unless $self->session('role') eq 'admin';

  my %sessiondetails = utils::buildSessionDetails(%deviceEntry);

 #THE FUNCTION BELOW IS WHERE THE DELAY CAN BE. 
 my $result = utils::connectToDevice(\%sessiondetails);

  if ($result ne 'failedconnect') {
    Vendor::importConfig($session,$dir);
    Vendor::processConfig($dir,$debug,$upload);
  }  
$self->render(text => $result);  
}

当我的utile :: connectToDevice需要一段时间来响应时,我看到整个回调再次被调用。

这是我的morbo webserver日志的输出。 APPEAR接到两个电话。

[Thu Nov 22 00:22:27 2012] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11).
[Thu Nov 22 00:22:27 2012] [debug] Routing to controller "MyApp::DevT" and action "importDevice".
[Thu Nov 22 00:22:50 2012] [debug] 200 OK (22.117681s, 0.045/s).
[Thu Nov 22 00:22:50 2012] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11).
[Thu Nov 22 00:22:50 2012] [debug] Routing to controller "MyApp::DevT" and action "importDevice".

1 个答案:

答案 0 :(得分:1)

我在进行ajax调用时的建议是,设置一个标志,指示已向服务器发出请求。每次检查标志,并根据它的状态决定是否发出请求。一旦从服务器获得响应重置标志。所以你可以试试这个 -

var running=false;
$("li#user").click(function(){

    if(!running){
       running=true;
       $.get('/userprofile',{partialrender: 'true' },
        function (data) {
          $("div#content").html(data);
          running=false; 
       });
    }
});

这将避免用户点击按钮100次并充斥请求的情况。

<强>更新

if条件中删除了错误。

如果上面的东西没有帮助,那么这样做。

$("li#user").unbind('click').click(function(){
   // do the thing
});

这将从元素中分离所有点击处理程序和事件,并再次绑定。