旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

详解怎样运用XMLHTTP发送超长XML表单数据【XML教程】,XMLHTTP,XML,表单数据

作者:搜教程发布时间:2019-11-28分类:XML教程浏览:79评论:0


导读:在把大批的XML作为POST数据的一部份发送给你的IIS服务器的时刻——诸如在ASP表单的TEXTAREA里——你能够会获得一些没有预料到的效果。当数据在服务器上被处置惩罚的时刻,...
在把大批的XML作为POST数据的一部份发送给你的IIS服务器的时刻——诸如在ASP表单的TEXTAREA里——你能够会获得一些没有预料到的效果。当数据在服务器上被处置惩罚的时刻,因为你处置惩罚数据体式格局的差别,你终究能够会遇到毛病。其原因是,当你把数据提交回服务器的时刻,POST字段里有一个(数据)大小的限定。如许做的目标是为了防备能够的入侵者在实行拒绝服务(denial of service,DoS)的攻击中向服务器发送超大批的数据。

这一限定也约束你的才能。然则有要领处理这个题目。假如你没被限定在只能够经由过程FORM提交来发送数据,那末你就能够运用XMLHTTP对象(微软的XML集里的一个DOM对象)来发送所须要的XML:

var oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
oXMLHTTP.open("POST", "xml_handler.asp", false);
oXMLHTTP.send(xml_to_send);

因为Request对象会完成IStream接口,所以你能够经由过程运用DOMDocument对象的load()要领来加载所要提交的XML:

Dim oDOM
Set oDOM = Server.CreateObject("MSXML2.DOMDocument")
oDOM.load Request

假如你被限定在只能够运用FORM提交,那末你能够经由过程提交多个TEXTAREA或许INPUT来逾越这一限定,前面二者在服务器一吸收到这个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);
}

这一段代码会建立一个新的FORM元素,用来处置惩罚数据的提交,并将它安排到BODY元素内。然后,它会搜检行将提交给服务器的XML的长度。这个XML驻留在someForm内部一个叫做txtXML的TEXTAREA里。

假如这个XML大于90,000字符的MAXLEN,那末这段代码就会建立多个隐蔽的INPUT(输入)元素,并把值的属性设置为90,000个字符的XML数据,或许设置为XML尾部的某个值,从而将这个数据分割成多个部份。假如这个XML的大小小于MAXLEN,那末这段代码就只会建立一个INPUT并响应地设置值。然后这个数据就被提交到服务器供处置惩罚。

你能够已注意到,我把雷同的称号——txtXML——指定给新表单的每一个字段。这将有助于把XML数据同其他能够会被提交的数据分开开来,并为重组XML数据供应了一种简朴的体式格局。在重组数据的时刻,你须要一个简朴的轮回来衔接字段里的数据:

Dim str, fld
For Each fld In Request.Form("txtXML")
   str = str & fld
Next

因为已为每一个FORM元素都建立了一个字段集,所以你能够在同一个称号的字段里迭代。只要以恰当的递次在客户端建立FORM元素,你就不须要忧郁字段被遍历的递次。经由过程FORM的appendChild()要领,这能够被轻易地完成。

数据在客户端是根据从左到右、从上到下的递次被提交的,所以当你把INPUT元素附加到FORM元素尾部的时刻,在你服务端也老是根据一样的递次来吸收数据的。

假如你正在追求完成一个大型的数据处理方案,比方将大批的Excel数据从客户机械通报到服务器上,那末你就应该重新考虑是不是要运用FORM提交,或许将数据从逻辑上分红多个小的部份。因为你没法运用文件范例INPUT元素,所以最具有创造力的处理方案是将数据在当地改变成为XML,再将XML数据提交给服务器。反过来,数据会保存在服务器上,直到须要更进一步处置惩罚。

固然,处置惩罚这个题目能够会有更好的要领。然则当你没有太多时候的时刻,你所须要的就是一个疾速的、可用的处理方案。

以上就是详解怎样运用XMLHTTP发送超长XML表单数据的细致内容,更多请关注ki4网别的相干文章!

标签:XMLHTTPXML表单数据


欢迎 发表评论: