Explication détaillée de la façon d'utiliser XMLHTTP pour envoyer des données de formulaire XML extrêmement longues

黄舟
Libérer: 2017-03-27 17:03:43
original
1500 Les gens l'ont consulté

Lors de l'envoi d'une grande quantité de XML à votre serveur IIS dans le cadre des données POST - comme dans la zone TEXTAREA du formulaire ASP - vous pouvez obtenir les résultats attendus. Lorsque les données sont traitées sur le serveur, vous pouvez rencontrer des erreurs dues à la manière dont vous traitez les données. La raison en est que lorsque vous soumettez des données au serveur, il existe une limite de taille (des données) dans le champ POST. Le but est d'empêcher d'éventuels intrus d'envoyer une quantité extrêmement importante de données au serveur lors d'une attaque par déni de service (DoS).

Cette limitation limite également vos capacités. Mais il existe des moyens de contourner ce problème. Si vous n'êtes pas limité à l'envoi de données uniquement via la soumission d'un FORMULAIRE, vous pouvez utiliser XMLHTTPObject (un Objet DOM dans l'ensemble XML de Microsoft) pour envoyer ce dont vous avez besoin XML :

var oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
oXMLHTTP.open("POST", "xml_handler.asp", false);
oXMLHTTP.send(xml_to_send);
Copier après la connexion

Puisque l'objet Request implémente l'interface IStream , vous pouvez charger le XML à soumettre en utilisant la méthode load() de l'objet DOMDocument :

Dim oDOM
Set oDOM = Server.CreateObject("MSXML2.DOMDocument")
oDOM.load Request
Copier après la connexion

Si vous êtes limité à la soumission uniquement en utilisant FORM, vous pouvez surmonter cette limitation en soumettant plusieurs TEXTAREA ou INPUT. Les deux premiers peuvent être réassemblés dès que le serveur reçoit les données FORM :

var MAXLEN = 90000;
var oForm = document.createElement("FORM");
oFORM.method = "POST";
oFORM.action = "xml_handler.asp";
oFORM = document.body.appendChild(oFORM);
var s = document.someForm.txtXML.value;
if (s.length > MAXLEN) {
   while (s.length > MAXLEN) {
     var o = document.createElement("INPUT");
     o.type = "hidden";
     o.name = "txtXML";
     o.value = s.substr(0, MAXLEN);
     oFORM.appendChild(o);
     s = s.substr(MAXLEN);
   }
   var o = document.createElement("INPUT");
   o.type = "hidden";
   o.name = "txtXML";
   o.value = s.substr(0, MAXLEN);
   oFORM.appendChild(o);
} else {
   var o = document.createElement("INPUT");
   o.type = "hidden";
   o.name = "txtXML";
   o.value = s;
   oFORM.appendChild(o);
}
Copier après la connexion

Cette pièce. de code créera un nouvel élément FORM pour gérer la soumission des données et le placera dans l'élément BODY. Il vérifie ensuite la longueur du XML qui est sur le point d'être soumis au serveur. Ce XML réside dans une TEXTAREA appelée txtXML à l'intérieur de someForm.

Si le XML est plus grand que le MAXLEN de 90 000 caractères, alors ce code créera plusieurs éléments INPUT cachés et définira l'attribut de la valeur sur les données XML de 90 000 caractères, ou définira une valeur à la fin du XML pour diviser les données en plusieurs parties. Si la taille de ce XML est inférieure à MAXLEN, alors ce code créera simplement un INPUT et définira la valeur en conséquence. Ces données sont ensuite soumises au serveur pour traitement.

Vous avez peut-être remarqué que j'ai attribué le même nom - txtXML - à chaque champ du nouveau formulaire. Cela aidera à séparer les données XML des autres données qui peuvent être soumises et fournira un moyen simple de réorganiser les données XML. Lors de la réorganisation des données, vous avez besoin d'une simple boucle pour connecter les données dans les champs :

Dim str, fld
For Each fld In Request.Form("txtXML")
   str = str & fld
Next
Copier après la connexion

Puisqu'un ensemble de champs a été créé pour chaque élément FORM, vous parcourez les champs avec le même nom. Tant que vous créez les éléments FORM côté client dans le bon ordre, vous n'avez pas à vous soucier de l'ordre dans lequel les champs sont parcourus. Cela peut être facilement réalisé grâce à la méthode appendChild() de FORM.

Les données sont soumises dans l'ordre de gauche à droite et de haut en bas sur le client, donc lorsque vous ajoutez l'élément INPUT à la fin de l'élément FORM, ce sera toujours dans le même ordre sur votre serveur . ordre de recevoir des données.

Si vous cherchez à mettre en œuvre une solution de données volumineuses, telle que le transfert de grandes quantités de données Excel de la machine client vers le serveur, vous devriez alors reconsidérer l'opportunité d'utiliser la soumission FORM ou de transférer logiquement les données Divide en parties plus petites. Puisque vous ne pouvez pas utiliser l'élément INPUT de type de fichier, la solution la plus créative consiste à convertir les données en XML localement, puis à soumettre les données XML au serveur. À leur tour, les données sont stockées sur le serveur jusqu'à ce qu'un traitement ultérieur soit nécessaire.

Bien sûr, il existe peut-être une meilleure façon de gérer ce problème. Mais lorsque vous n’avez pas beaucoup de temps, il vous suffit d’avoir une solution rapide et utilisable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!