2011-10-23 9 views
13

Nadal nie używam Javascript. Opracowuję prostą stronę, na której klikam przycisk pobierający wartość z serwletu i wyświetlam go. Działa dobrze, chyba że kliknę jak szalony na przycisku. Czasami wyświetlany wynik jest zerowy.Czy wywołania metody Javascript są wątkowane lub synchronizowane?

Zastanawiam się, czy jest to spowodowane przez jednoczesnych połączeń do tej samej funkcji czynności:

function loadXMLDoc2(retr) { 
    var xmlhttp; 
    if (window.XMLHttpRequest) { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    xmlhttp.onreadystatechange=function() { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
      $("#" + retr).button('option', 'label', xmlhttp.responseText); 
      // document.getElementById(retr).innerHTML=xmlhttp.responseText; 
     } 
    } 
    var param = "cmd=" + encodeURIComponent(retr); 
    document.getElementById("TOP_LEFT").innerHTML = param; 
    xmlhttp.open("GET","/WebFront/Asynclet?" + param,true); 
    xmlhttp.send(null); 
} 

Czy Javascript wątku bezpieczny? A jeśli nie, w jaki sposób mogę zsynchronizować lub wyizolować wywołania tej metody?

+0

Myślę, że większość przeglądarek próbuje zapobiegać wyścigom. Nie widziałem żadnych bloków synchronizacji ani takich w JavaScript, które zostały zaprojektowane jako łatwe (i jednowątkowe). –

Odpowiedz

31

Oprócz webmasterów HTML5 (które są bardzo ściśle kontrolowane), Javascript jest pojedynczy wątek, więc nie ma problemów z bezpieczeństwem wątków. Jeden wątek wykonania zakończy się przed następnym uruchomieniem.

Rzeczy takie jak odpowiedzi ajax przechodzą przez kolejkę zdarzeń i są wykonywane tylko po zakończeniu dowolnego innego wątku wykonywania.

Aby uzyskać więcej informacji, zobacz Do I need to be concerned with race conditions with asynchronous Javascript?.

Aby uzyskać szczegółowe omówienie wywołań zwrotnych odpowiedzi ajax, zobacz How does JavaScript handle AJAX responses in the background?.

4

W kontekście przeglądarki JavaScript jest w zasadzie jednowątkowy. (Istnieją nowsze funkcje przeglądarki, które zapewniają rodzaj wątków, ale interakcje między wątkami są bardzo ograniczone, a danych nie można bezpośrednio udostępnić.)

Powiązane problemy