Jquery.get超时时的行为



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

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

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

所以我的问题是;

1) 这是正常行为吗?和2) 如果是的话,是JQuery进行额外的调用还是浏览器?3) 有什么好的处理方法?

我很感激问题3的答案可能很难,但我们非常感谢您的帮助。

非常感谢。

更新:

谢谢各位,

好的,因为后端数据库很小,所以我不能用那个确切的调用产生问题,但我可以用另一个相同的调用。我在出发前打了一个警报电话,但只打了一次。我正在使用Mojolicus网络框架,所以我想知道它是否与此有关?我正在使用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网络服务器日志的输出。看起来确实接到了两个电话。

[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".

在进行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
});

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

最新更新