2012-11-22 17 views
6

Ben web kodlama yeniyim ve son zamanlarda JQuery ile oynarken edilmiştir. Bazı davranışlar fark ettim ve normal davranışın ve bununla başa çıkmanın en iyi yolunun olup olmadığını öğrenmek istedim.Zaman aşımındaki Jquery.get davranışı?

Web sunucuma basit bir giriş yapıyorum, bazen sunucunun sonucunu döndürmesi birkaç dakika sürebilir. Fark ettiğim, sunucu taraf kodumun birden çok kez çağrılmasıdır, bu durumda '/ userprofile' 3 kez çağrılabilir.

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

Sorularım;

1) Bu normal bir davranış mı? ve 2) Öyleyse JQuery fazladan arama veya tarayıcı yapıyor mu? 3) Bunu işlemenin iyi yolları nelerdir?

3. soruya verilen cevapların zor olabileceğini biliyoruz, ancak herhangi bir yardım çok takdir ediliyor.

Çok teşekkürler.

GÜNCELLEME: nedeniyle arka uç veritabanı küçük olmak ama başka özdeş çağrısı ile can için

Teşekkür Çocuklar, bu yüzden tam bu çağrı ile sorunu üretemez Tamam

. Almadan hemen önce bir uyarı çağrısı yaptım ve sadece bir kez aradı. Mojolicious web çerçevesini kullanıyorum, bununla ilgili bir şey yapıp yapamayacağımı merak ediyorum. Morbo web sunucusunu kullanıyorum.

İşte benim Utile :: connectToDevice yanıt vermek için bir süre alır zaman bu davranışı

("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); 
} 

sergiliyor benim kodudur, ben bütün geri arama tekrar denir görüyoruz.

Ve işte benim morbo web sunucusu günlüğümden çıktı. İki çağrı almak için APPEAR yapar.

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

cevap

1

Ajax çağrıları yaparken öneri, sunucuda zaten bir istek yapıldığını belirten bir işaret belirleyecektir. Her seferinde bayrağı kontrol edin ve isteğine bağlı olup olmadığına karar verin. Yanıtı aldıktan sonra sunucuyu sıfırla. Böylece bunu deneyebilirsiniz - Bu, 100 kez ve tıklatma istekleri düğmesinin tıklanması durumunda kullanıcının durumundan kaçınacaktır. eğer durumda

Güncelleme

kaldırıldı hatası. Yukarıdaki şey işe yaramıyorsa, bunu yapın.

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

Bu, tüm tıklama işleyicileri ve olayları öğeden ayırır ve yeniden bağlar.

+0

teşekkürler. Bu basit ama etkili bir çözüm olabilir. Bunun normal davranış olup olmadığını doğrulayabilir misiniz? Sunucu tarafı işlevimin yeniden çağrılmasını beklemiyordum.Ancak, sunucuma sonraki aramalar Jquery'den dahili olarak gerçekleşiyorsa ve bir tuşa tıklama yapmıyorsa, o zaman durdurur mu? Onu test edip göreceğim. –

+0

Bu normal bir davranış değildir. .get' sadece kullanıcı tıkladığında çağrılmalıdır. Sanırım ne oluyor, tıklama işleyicisi bir kereden fazla gerçekleştiriliyor. – SachinGutte

+0

Sanırım sorun jQuery ile değil, işleyiciyi tıklıyor. Html kodunu gönderir misin? – SachinGutte