IFrames bilden einen verwendbaren Transport für asynchrone Anrufe, weil sie Inhalt laden können, ohne die gesamte Seite zu veranlassen neu zu laden und neue IFrame Elemente mit Javascript verursacht werden können. Das netteste Attribut über ein IFrame ist, daß eine Form ein als sein Ziel verwenden kann und dieses IFrame anstelle von der gesamten Seite neu laden; diese Annäherung erlaubt, daß große Mengen Daten zum Bediener mit PFOSTEN geschickt werden.
|
|
Eine Schwierigkeit, wenn sie ein IFrame als Transport verwendet, ist, daß die Seite, die wir Laden sind, HTML sein muß und sie eine Javascript onload Fallzufuhr haben muß, zum des Elternteildokumentes zu erklären, wenn es erfolgtes Laden ist. Diese Notwendigkeit zwingt alle Anträge, die mit gebildet werden zu den Seiten gebildet zu werden IFrames,, die entworfen sind, um IFrame Anträge zu beschäftigen. (Code kann nicht eine XML Akte in der Weise gerade ergreifen, die XMLHttpRequest. erlaubt)
Merken Sie, daß der Gebrauch IFrames eine Anzahl von weiteren Beschränkungen hat:
Ein Vorteil, dem ein IFrame ÜberxMLHttpRequest hat, ist, daß er verwendet werden kann, um Akte Antriebskräfte zu bilden. Wegen der Datenbanksuchroutinesicherheit Beschränkungen, nur Benutzertätigkeiten, wie Anklicken einer Form, kann auf Akten auf der Maschine des Benutzers einwirken. Dieses bildet einem IFrame das Zielen einer Form die einzige Wahl für Akte Antriebskräfte, die nicht einen normalen Formpfosten- und -seitenumladenzyklus miteinbeziehen. Jedoch gibt es keinen Grund, den Sie nicht zurück zu dem Verwenden von von einem IFrame für Akte Antriebskräfte und von von XMLHttpRequest fallen können für den Rest Ihrer AJAX Anträge. Es sei denn Sie RemoteScriptingart AJAX Anträge bilden, fügt das Arbeiten um IFrame Beschränkungen eine bedeutende Menge Arbeit jedem möglichem AJAX Entwicklung Projekt hinzu.
Um maximale Kompatibilität mit älteren Datenbanksuchroutinen zu erhalten, konnten Sie das IFrame Ihrem HTML gerade hinzufügen und ihm eine Größe von 0x0 geben. (Sie können nicht es gerade verstecken, oder einige Datenbanksuchroutinen laden es nicht.) Jedoch ist diese Annäherung nicht flexibel, also wünschen Sie den Rahmen dynamisch verursachen. Nicht alle älteren Datenbanksuchroutinen stützen document.createElement, aber Datenbanksuchroutinen ohne diese Unterstützung ermangeln im Allgemeinen die anderen dynamischen Fähigkeiten, die benötigt werden, um die Daten zu verwenden, die Sie laden, also ist sie am besten, Unterstützung zu ihnen mit einer statischen HTML Version der Seite zu geben. Im folgenden Beispiel wird das IFrame mit innerHTML verursacht, weil es einfacher als ist, es verursachend DOM Methoden verwendend. Anmerkung jedoch daß sie mit document.createElement auch verursacht werden könnte, gerade wie die Div., der es hinzugefügt wird:
1 var rDiv = document.createElement('div ');
2 rDiv.id = ' remotingDiv ';
3 var Art = ' border:0;width:0;height:0;';
4 rDiv.innerHTML = "";
6
7 document.body.appendChild(rDiv);
Wenn Sie nur einen ERHALTENANTRAG bilden möchten, können Sie den Wert der Eigenschaft src des IFrames ändern, aber, PFOSTEN zu tun, müssen Sie eine gerichtete Form benutzen. ERHALTEN Sie ist nicht eine gute Lösung für AJAX Anträge aus zwei Gründen: es kann nur eine begrenzte Menge Daten (eine Menge, die abhängig von der Datenbanksuchroutine ändert), senden und ERHÄLT kann durch Vollmachtbediener cachiert werden und/oder vorbelastet werden, also möchten Sie nie sie benutzen, um eine Tätigkeit wie Aktualisierung Ihrer Datenbank durchzuführen.
Eine Form mit einem IFrame zu verwenden ist einfach. Gerecht lädt Satz das Zielattribut der Form und wenn Sie die Form einreichen, das Resultat im IFrame. Das folgende Beispiel verursacht unsere Form und stellt seine Ziele auf das IFrame ein, das wir früh im "das Verursachen ein verstecktes IFrame" Abschnitt des Artikels verursachten:
1 rDiv.form = document.createElement('form ');
2 rDiv.form.setAttribute('id ', id+'RemotingForm ');
3 rDiv.form.setAttribute('action ', URL);
4 rDiv.form.setAttribute('target ', Kennzeichnung);
5 rDiv.form.target = Kennzeichnung;
6 rDiv.form.setAttribute('method ', ' Pfosten ');
7 rDiv.form.innerHTML = '
8 id="'+id+'Data" > ';
Die einzige Weise, zu wissen, daß der Inhalt des IFrame geladen hat, soll die zufriedene Seite haben laufen lassen irgendein Javascript, das die Elternteilseite mitteilt, in der das IFrame eingebettet wird. Die einfachste Weise, dies zu tun soll die onload Fallzufuhr auf dem Dokument einstellen, das Sie laden. Diese Beschränkung bedeutet, daß Sie nicht ein IFrame für willkürlichen Inhalt des Ladens verwenden können, wie Sie mit XMLHttpRequest können. Jedoch ist es noch für Fälle nützlich, in denen eine einzelne Bedienerseite bereits als AJAX Einfahrt benutzt wird. Ist hier ein Beispiel von onload:
Ein volles Beispiel von einem IFrame, das AJAX verlangt, schließt zwei Stücke ein. Das erste Stück ist der Klient-Seite Code, zum des IFrame und der Form zu verursachen. Das zweite Stück ist der Bediener-Seite Code, der etwas Daten vorbereitet und sie zurück zu dem Elternteildokument in seiner onload Fallzufuhr sendet.
Das erste Teil des Beispiels (Auflistung 1) ist der Javascriptcode in einer einfachen HTML Akte. Diese Seite wird für die Prüfung benutzt; die Wiederholungsbesuch Funktion alarmiert gerade den Inhalt der Resultate. Das zweite Teil des Beispiels (Auflistung 2) ist ein einfacher PHP Index, der die Daten vom PFOSTEN nimmt und sie zurück zu dem Elternteildokument sendet. Um ein nützliches System zu bilden, konnten Sie einige Extravariablen in der Form einschließen auch wünschen, die dem PHP Code was erklären würde mit den gehochladenen Daten zu tun, oder Sie konnten die Logik direkt in den Index setzen und eine andere Zielseite für jede Aufgabe benutzen, die Sie vollenden wollten.
Registrierung 1. Bilden eines AJAX Antrags mit einem IFrame
| 1 2 3 50 51 52 53 54 Test 55 56 57 58 |
Die Registrierung 1 besteht drei Funktionen:
Die createRemotingDiv Funktion (Linien 5 - 28) kombiniert den vorher beschriebenen Code für das Verursachen von von einem versteckten IFrame mit dem Code für das Verursachen einer Form, um bei ihr einzureichen. Wenn die Form verursacht wird, wird sie gegen das eben verursachte IFrame gezielt und bildet den Formunterordnunggebrauch sie, anstatt, die aktuelle Seite neu zu laden. Das IFrame während der Entwicklung zu zeigen ist häufig im Ausprüfenprozeß nützlich, damit Sie jeden möglichen Ausgang sehen können, der durch die Seite erzeugt wird, die Sie benennen. Sie können dies tun, indem Sie die Art auf Linie 8 redigieren und sie zu width:200;height:200; ändern.
Die sendRequest Funktion (Linien 30 - 40) bildet einen AJAX Antrag. Sie nimmt das URL, zu dem den Antrag, eine Nutzlast, zum Bediener und eine Wiederholungsbesuch Funktion bilden zum Durchlauf zu senden, wenn der Antrag komplett ist. Die Funktion benutzt createRemotingDiv, um den Prozeß (Linien 31-34) aufzustellen. Dann fügt sendRequest Updates die Tätigkeit auf der IFrame Form (Linie 35), den Nutzlast Wert auf der Form hinzu und reicht die Form mit dem IFrame ein. Wenn die neue Seite in das IFrame geladen wird, verwendet das neue Dokument eine Javascript onload Zufuhr, um die Wiederholungsbesuch Funktion zu benennen, die in die sendRequest Methode geführt wurde. Die PHP Seite, die den Form PFOSTEN verarbeitet und das onload Javascript verursacht, wird in Auflistung 2 gezeigt
Registrierung 2. PHP Bediener-Seite, die einen IFrame AJAX Antrag anfaßt
| 1 2 3 8 9 onload 10 = 11 "parent.document.getElementById('remotingDiv').callback(result)" > 12 13 |
Auf der Bedienerseite wird die Form verarbeitet und Ausgang wird in Form eines HTML page verursacht. Die einfachste Weise, neue Daten zu addieren soll das Javascript erzeugen, welches die neuen Daten enthält. In diesem Fall sind wir gerecht, die Daten zurück zu dem Klienten widerhallend, indem wir sie in die Resultat Variable (Linien 4-6) einsetzen. Normalerweise sind Sie laufender Bediener-Seite Code hier und entweder, eine Zeichenkette ausgebend (als in diesem Fall) oder neuen Javascriptcode Durchlauf gegen das Elternteildokument hinzufügend. Die Wiederholungsbesuch Funktion auf dem Elternteil wird von der onload Zufuhr auf dem Körperumbau (Linie 11) benannt.
Online: 704 users browsing the articles directory
|
|