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);
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
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); }
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
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!