Mar*_*los 6 perl jquery mojolicious
我是网络编码的新手,最近一直在玩JQuery.我注意到了一些行为,并想知道它是否是正常行为以及处理它的最佳方法.
我正在做一个简单的访问我的Web服务器,有时服务器可能需要几分钟才能返回其结果.我注意到我的服务器端代码被多次调用,在这种情况下'/ userprofile'最多可以被调用3次.
("li#user").click(function(){
$.get('/userprofile',{partialrender: 'true' },
function (data) {
$("div#content").html(data);
});
});
Run Code Online (Sandbox Code Playgroud)
所以我的问题是;
1)这是正常行为吗?2)如果是这样JQuery进行额外的调用或浏览器?3)有什么好方法可以解决这个问题?
我很欣赏问题3的答案可能很难,但是非常感谢任何帮助.
非常感谢.
更新:
多谢你们,
好吧所以我不能用那个确切的调用产生问题,因为后端数据库很小但我可以用另一个相同的调用.我在get之前发出了一个警报,只调用一次.我正在使用Mojolicious webframework,所以我想知道它是否可以与之相关?我正在使用Morbo Web服务器.
这是我的代码,表现出这种行为
("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);
}
Run Code Online (Sandbox Code Playgroud)
当我的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".
Run Code Online (Sandbox Code Playgroud)
我在进行 ajax 调用时的建议是,设置一个标志,指示已经向服务器发出了请求。每次检查该标志并根据其状态决定是否发出请求。一旦收到服务器的响应,就会重置标志。所以你可以尝试这个 -
var running=false;
$("li#user").click(function(){
if(!running){
running=true;
$.get('/userprofile',{partialrender: 'true' },
function (data) {
$("div#content").html(data);
running=false;
});
}
});
Run Code Online (Sandbox Code Playgroud)
这样就可以避免用户点击按钮100次、请求泛滥的情况。
更新
删除了 if 条件中的错误。
如果上述事情没有帮助,那么就这样做。
$("li#user").unbind('click').click(function(){
// do the thing
});
Run Code Online (Sandbox Code Playgroud)
这将从元素中分离所有单击处理程序和事件并再次绑定。
归档时间: |
|
查看次数: |
156 次 |
最近记录: |