2016-08-01 4 views

Antwort

0

AJAX ist ein JavaScript (Satz) Bibliothek (en), die in der Anwendung und ausgeführt durch den Interpreter des Browsers enthalten ist.

+0

Dies ist sehr falsch, siehe die Haresh-Antwort. AJAX ist überhaupt keine Bibliothek oder Bibliothek, es ist nur ein Akronym. – Jay

+0

Danke für die Korrektur @Wade. Du hast offensichtlich recht. Ich wollte eigentlich sagen, dass am Ende des Tages alles, was Sie haben, Javascripte (was Sie entwickeln und was auch immer Sie in Ihr Projekt "einbeziehen") interpretiert von dem Interpreter, der vom Browser ausgeführt wird. Ich sollte vorsichtiger mit meinen Phrasierungen sein ... – FDavidov

1

Definition von AJAX

AJAX steht für Asynchronous JavaScript and XML. Kurz gesagt, ist es die Verwendung des XMLHttpRequest-Objekts, um mit serverseitigen Skripten zu kommunizieren. Es kann Informationen in einer Vielzahl von Formaten senden und empfangen, einschließlich JSON, XML, HTML und sogar Textdateien. AJAXs attraktivste Eigenschaft ist jedoch seine "asynchrone" Natur, was bedeutet, dass es all dies tun kann, ohne die Seite aktualisieren zu müssen. Auf diese Weise können Sie Teile einer Seite basierend auf Benutzerereignissen aktualisieren.

XMLHttpRequest ist Gegenstand von Browser für AJAX zur Verfügung gestellt.

0

JavaScript wird normalerweise so betrachtet, dass ein einzelner Thread der Ausführung für Skripte (*) sichtbar ist. Wenn Sie also ein Inline-Skript, Ereignis-Listener oder Timeout eingeben, behalten Sie die volle Kontrolle, bis Sie vom Ende Ihrer Blockierung zurückkehren oder Funktion.

(*:. Ignorieren die Frage, ob Browser wirklich ihre JS Motoren implementieren ein OS-Thread, oder ob andere begrenzte Gewinde-of-Ausführung werden durch Webworkers eingeführt)

Doch diese isn in Wirklichkeit‘ Ganz richtig, auf hinterhältige Weise.

Der häufigste Fall ist sofort Ereignisse. Browser werden diese sofort ausgelöst, wenn Ihr Code etwas tut, sie zu veranlassen:

<textarea id="log" rows="20" cols="40"></textarea> 
    <input id="inp"> 
<script type="text/javascript"> 
var l= document.getElementById('log'); 
var i= document.getElementById('inp'); 
i.onblur= function() { 
    l.value+= 'blur\n'; 
}; 
setTimeout(function() { 
    l.value+= 'log in\n'; 
    l.focus(); 
    l.value+= 'log out\n'; 
}, 100); 
i.focus(); 
    </script> 

Ergebnisse in Log-in, verschwimmen, melden Sie sich auf alle außer IE. Diese Ereignisse werden nicht ausgelöst, weil Sie focus() direkt aufgerufen haben, weil sie alert() aufgerufen oder ein Popup-Fenster oder etwas anderes geöffnet haben, das den Fokus verschiebt.

auch zu anderen Veranstaltungen Dies kann. Zum Beispiel ein i.onchange Zuhörer hinzufügen und etwas in den Eingang vor dem Fokustyp() -Aufruf unfocuses es, und das Protokoll ist, um melden Sie sich an, ändern, verschwimmen, sich abzumelden, außer in Opera, wo er log in ist, verschwimmen, sich abzumelden , ändern und IE, wo es ist (noch weniger erklärbar) einloggen, ändern, abmelden, verwischen.

ähnlicher Aufruf click() auf einem Element, ruft es die Onclick-Handler sofort in allen Browsern (zumindest ist dies im Einklang!) Zur Verfügung stellt.

(Ich benutze die direkt am ... Event-Handler-Eigenschaften hier, aber das gleiche geschieht mit addEventListener und attachEvent.)

Es gibt auch eine Reihe von Umständen, in denen Ereignisse während Ihres Code abfeuern können, ist Gewinde in, obwohl du nichts getan hast, um es zu provozieren. Ein Beispiel:

 <textarea id="log" rows="20" cols="40"></textarea> 
     <button id="act">alert</button> 
     <script type="text/javascript"> 
     var l= document.getElementById('log'); 
     document.getElementById('act').onclick= function() { 
     l.value+= 'alert in\n'; 
     alert('alert!'); 
     l.value+= 'alert out\n'; 
     }; 
     window.onresize= function() { 
     l.value+= 'resize\n'; 
     }; 

Hit Alarm und Sie erhalten ein modales Dialogfeld zu bekommen. Es wird kein Skript mehr ausgeführt, bis Sie diesen Dialog schließen, ja? Nee. Ändern Sie die Größe des Hauptfensters und Sie erhalten eine Benachrichtigung, Größe ändern, im Textbereich melden.

Sie könnten denken, dass es unmöglich ist, ein Fenster zu skalieren, während eine modale Dialogbox geöffnet ist, aber nicht so: Unter Linux können Sie das Fenster beliebig skalieren; unter Windows ist es nicht so einfach, aber Sie können es tun, indem Sie die Bildschirmauflösung von einer größeren auf eine kleinere ändern, wo das Fenster nicht passt, wodurch die Größe geändert wird.

Sie könnten denken, nun, es ist nur die Größe (und wahrscheinlich ein paar mehr wie scroll), die ausgelöst werden kann, wenn der Benutzer keine aktive Interaktion mit dem Browser hat, weil Skript eingefädelt ist. Und für einzelne Fenster könnten Sie Recht haben. Aber das alles geht in den Topf, sobald Sie Cross-Window-Scripting machen. Für alle anderen Browser außer Safari, die alle Fenster/Tabs/Frames blockieren, wenn einer von ihnen ausgelastet ist, können Sie mit einem Dokument aus dem Code eines anderen Dokuments interagieren, das in einem separaten Ausführungsthread ausgeführt wird und damit verbundene Event-Handler verursacht Feuer.

Orte, an denen Ereignisse, die Sie verursachen können erzeugt werden können, während Skript angehoben werden noch Gewinde:

, wenn die modalen Popups (Alarm, bestätigt, prompt) offen sind, in allen Browsern, aber Opera; während showModalDialog auf Browser, die es unterstützen; Das Dialogfeld "Ein Skript auf dieser Seite kann beschäftigt sein ...", selbst wenn Sie das Skript weiterlaufen lassen, ermöglicht Ereignisse wie Größe und Unschärfe zu zünden und selbst während das Skript sich in der Mitte befindet eine Busy-Loop, außer in Opera. vor einiger Zeit, in IE mit dem Sun Java Plugin, Aufruf einer Methode auf einem Applet konnte Ereignisse auslösen und Skript erneut eingegeben werden. Das war immer ein Timing-sensitiver Bug, und es ist möglich, dass Sun es seither repariert hat (ich hoffe es). wahrscheinlich mehr. Es ist eine Weile her, seit ich das getestet habe und die Browser haben seitdem an Komplexität gewonnen. Zusammenfassend scheint JavaScript den meisten Benutzern die meiste Zeit einen strikt ereignisgesteuerten einzelnen Ausführungsthread zu geben. In Wirklichkeit hat es so etwas nicht. Es ist nicht klar, wie viel davon nur ein Fehler ist und wie viel bewusstes Design, aber wenn Sie komplexe Anwendungen schreiben, besonders Cross-Window/Frame-Scripting, gibt es jede Chance, dass Sie Sie beißen können - und in intermittierenden, schwer zu debuggende Möglichkeiten.

Im schlimmsten Fall können Sie Nebenläufigkeitsprobleme lösen, indem Sie alle Ereignisantworten umleiten. Wenn ein Ereignis eintrifft, legen Sie es in einer Warteschlange ab und bearbeiten Sie die Warteschlange später in einer setInterval-Funktion. Wenn Sie ein Framework schreiben, das Sie für komplexe Anwendungen verwenden möchten, könnte dies ein guter Schritt sein. PostMessage wird hoffentlich auch in Zukunft den Aufwand für Cross-Document-Skripting lindern.

Antwort ist Von diesem Link: Is JavaScript guaranteed to be single-threaded?