~ de l'option 1 de chute d'AJAX envoyant une demande en utilisant un IFrame

IFrames font un transport approprié pour des appels asynchrones parce qu'ils peuvent charger le contenu sans faire la page entière recharger, et de nouveaux éléments d'IFrame peuvent être créés en utilisant le Javascript. L'attribut le plus gentil au sujet d'un IFrame est qu'une forme peut employer un en tant que sa cible, rechargeant cet IFrame au lieu de la page entière ; cette approche permet à de grandes quantités de données d'être envoyées au serveur à l'aide du POTEAU.

  

Une difficulté en employant un IFrame comme transport est que la page que nous sommes chargement doit être HTML, et elle doit avoir un traiteur d'événement d'onload de Javascript pour dire le document de parent quand c'est chargement fait. Ce besoin force toutes les demandes étant faites avec IFrames à faire aux pages conçues pour traiter des demandes d'IFrame. (le code ne peut pas simplement saisir un dossier de XML de la manière que XMLHttpRequest permet.)

Notez que l'utilisation d'IFrames a un certain nombre autres de limitations :

Un avantage qu'un IFrame a XMLHttpRequest fini est qu'il peut être employé pour faire des téléchargements de dossier. En raison des limitations de sécurité de navigateur, seulement actions d'utilisateur, telles que cliquer une forme, peut agir l'un sur l'autre avec des dossiers sur la machine de l'utilisateur. Ceci fait viser une forme à un IFrame la seule option pour les téléchargements de dossier qui n'impliquent pas un cycle normal de recharge de POTEAU et de page de forme. Cependant, il y a aucune raison que vous ne pouvez tomber de nouveau à employer un IFrame pour des téléchargements de dossier et XMLHttpRequest pour le reste de vos demandes d'AJAX. À moins que vous fassiez des demandes à distance du scripting-modèle AJAX, travailler autour des limitations d'IFrame ajoutera une quantité significative de travail à n'importe quel projet de développement d'AJAX.

Créer un IFrame caché

Pour obtenir la compatibilité maximum avec des navigateurs plus âgés, vous pourriez juste ajouter l'IFrame à votre HTML et lui donner une taille de 0x0. (vous ne pouvez pas simplement le cacher, ou quelques navigateurs ne le chargeront pas.) Cependant, cette approche n'est pas souple, ainsi vous voudrez créer l'armature dynamiquement. Non tous les navigateurs plus âgés soutiennent document.createElement, mais les navigateurs sans cet appui manqueront généralement des autres possibilités dynamiques requises pour employer les données que vous chargez, ainsi il est le meilleur pour leur fournir l'appui en version statique de HTML de la page. Dans l'exemple suivant, l'IFrame est créé en utilisant l'innerHTML parce qu'il est plus simple que le créant employant des méthodes de DOM. Note, cependant, qu'elle pourrait également être créée avec document.createElement, juste comme la division à laquelle on l'ajoute :

1 rDiv de variété = document.createElement('div ') ;
2 rDiv.id = 'remotingDiv ';
modèle de 3 variétés = 'border:0;width:0;height:0;';
4 rDiv.innerHTML = "";
6
7 document.body.appendChild(rDiv) ;

Créer une forme

Si vous voulez faire seulement une demande d'OBTENIR, vous pouvez changer la valeur de la propriété du src de l'IFrame, mais pour faire le POTEAU, vous devez employer une forme visée. OBTENEZ n'est pas une bonne solution pour des demandes d'AJAX de deux raisons : il peut envoyer seulement une quantité limitée de données (une quantité qui changent selon le navigateur), et OBTIENT peut être caché et/ou préchargé par des serveurs de procuration, ainsi vous ne voulez jamais l'employer pour effectuer une action telle que mettre à jour votre base de données.

Employer une forme avec un IFrame est facile. Juste l'ensemble l'attribut de la cible de la forme, et quand vous soumettez la forme, le résultat charge dans l'IFrame. L'exemple suivant crée notre forme et place ses cibles à l'IFrame que nous avons créé plus tôt dans la section "créer IFrame caché" de l'article :

1 rDiv.form = document.createElement('form ') ;
2 rDiv.form.setAttribute('id ', id+'RemotingForm ') ;
3 rDiv.form.setAttribute('action ', URL) ;
4 rDiv.form.setAttribute('target ', identification) ;
5 rDiv.form.target = identification ;
6 rDiv.form.setAttribute('method ', 'poteau ') ;
7 rDiv.form.innerHTML = ' 8 id="'+id+'Data" > ';

Envoyez les données du contenu chargé au document original

La seule manière de savoir que la teneur de l'IFrame a chargé est d'avoir la page contente courent un certain Javascript qui informe la page de parent en laquelle l'IFrame est enfoncé. La manière la plus simple de faire ceci est de placer le traiteur d'événement d'onload sur le document que vous chargez. Cette limitation signifie que vous ne pouvez pas employer un IFrame pour le contenu arbitraire de chargement comme vous pouvez avec XMLHttpRequest. Cependant, il est encore utile pour les cas dans lesquels une page simple de serveur déjà est employée comme passage d'AJAX. Voici un exemple d'onload :

Accomplissez L'Exemple D'IFrame AJAX

Un plein exemple d'un IFrame qu'ajax demande inclut deux morceaux. Le premier morceau est le code de client-côté pour créer l'IFrame et la forme. Le deuxième morceau est le code de serveur-côté, qui prépare quelques données et les envoie de nouveau au document de parent dans son traiteur d'événement d'onload.

La première partie de l'exemple (la liste 1) est le code de Javascript dans un dossier simple de HTML. Cette page est employée pour l'essai ; la fonction de rappel de service alerte juste les teneurs des résultats. La deuxième partie de l'exemple (la liste 2) est un manuscrit simple de PHP, qui prend les données du POTEAU et les envoie de nouveau au document de parent. Pour faire un système utile, vous pourriez également vouloir inclure quelques variables supplémentaires sous la forme, qui indiquerait au code de PHP quoi faire avec les données téléchargées, ou vous pourriez mettre la logique directement dans le manuscrit et employer une page différente de cible pour chacun chargez-vous a voulu accomplir.

Énumération de 1. Fabrication d'une demande d'AJAX en utilisant un IFrame

1
2
3
50
51
52
53
54
essai 55
56
57
58

L'énumération de 1 se compose de trois fonctions :

La fonction de createRemotingDiv (lignes 5 - 28) combine le code précédemment décrit pour créer un IFrame caché avec le code pour créer une forme pour soumettre à elle. Quand la forme est créée, elle est visée contre l'IFrame nouvellement créé, la faisant à l'utilisation de soumission de forme au lieu de recharger la page courante. Montrer l'IFrame pendant le développement est souvent utile dans le procédé de correction de sorte que vous puissiez voir n'importe quel rendement produit par la page que vous appelez. Vous pouvez faire ceci en éditant le modèle sur la ligne 8 et en le changeant en width:200;height:200 ;.

La fonction sendRequest (lignes 30 - 40) fait une demande d'AJAX. Elle prend le URL auquel pour faire la demande, une charge utile d'envoyer au serveur, et une fonction de rappel de service à la course quand la demande est complète. La fonction emploie le createRemotingDiv pour installer le processus (lignes 31-34). Puis les mises à jour sendRequest l'action sur la forme d'IFrame (ligne 35), ajoute la valeur de charge utile sur la forme, et soumet la forme en utilisant l'IFrame. Quand la nouvelle page est chargée dans l'IFrame, le nouveau document emploie un traiteur d'onload de Javascript pour appeler la fonction de rappel de service qui a été passée dans la méthode sendRequest. La page de PHP qui traite le POTEAU de forme et crée le Javascript d'onload est montrée dans la liste 2

Énumération de 2. Page de serveur de PHP qui manipule une demande d'IFrame AJAX

1
2
3
8
9 onload 10 =
11 "parent.document.getElementById('remotingDiv').callback(result)" >
12
13

Du côté de serveur, la forme est traitée et le rendement est créé sous forme de HTML page. La manière la plus simple d'ajouter de nouvelles données est de produire du Javascript contenant les nouvelles données. Dans ce cas-ci, nous sommes justes faisant écho les données de nouveau au client en la mettant dans la variable de résultat (lignes 4-6). Normalement, vous serez code courant de serveur-côté ici et produisant une corde (en tant que dans ce cas-ci) ou ajoutant le nouveau code de Javascript à la course contre le document de parent. La fonction de rappel de service sur le parent s'appelle par le traiteur d'onload sur l'étiquette de corps (ligne 11).

c'est un article supplémentaire par la hymne de louange Rudenberg


Déni : Notre site Web n'est pas responsable de l'information contenue par cet article. Cet article reflète nullement les vues, les avis, les pensées ou la croyance du personnel d'annuaire d'articles.

Notification de traduction : L'article "~ de l'option 1 de chute d'AJAX envoyant une demande employant un IFrame" a été traduit en utilisant un service de traduction automatisé. Nous faisons des excuses sincèrement pour toutes les erreurs de traduction qui se sont produites. Merci de l'arrangement.

Online: 525 users browsing the articles directory