ASP.NET的WEBSERVICE可以通过POST方式提交,通常在直接利用这个方式 来进行交互的时候,比较习惯采用AJAX方法提交,然后还可以很方便的处理数据,但是如果我们采用FORM提交,页面会转向到WEBSERVICE返回的XML页。这样明显是不可取的,那么要利用FORM表单提交到WEBSERVICE并获得返回的信息怎么办呢?
可以利用IFRAME小窗体,FORM提交后,将返回的页面用IFRAME接收,然后又可以通过处理IFRAME的DOCUMENT来处理返回的数据了。
获得返回信息很简单,关键在于如何处理信息,返回的信息是不可以直接用来当作XML文档处理的,用document.body.innerHTML查看就可以发现,里面是HTML的代码显示所看到的好象是XML页面,而不是真正的XML,所以就没办法直接用DOM处理数据,然后再看document.body.innerText ,其中的字符传已经是标准的XML结构了,就跟我们看到的页面上的一样,但是多了个“-”号或“+”号,还有换行。不过没关系,我们将这些多余的符号去掉,然后用XMLDOM对象LOAD一下就可以创建出一个DOM对象了。
以下是我的代码部分
//Creat XMLDOM Instance
function CreateXMLDOM()
{
//Build a string Array
var arrSignatures = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0",
"MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument",
"Microsoft.XmlDom"];
//Circle the Array until creat the XMLDOM Instence
for (var i=0; i < arrSignatures.length; i++) {
try {
var oXmlDom = new ActiveXObject(arrSignatures[i]);
return oXmlDom;
} catch (oError) {
//on Error ignore
}
}
throw new Error("You system have not MSXML");
}
//Dom Instance load XML format String,and trans to XmlDom Instance
function CreatStrDom(str,bstr,estr)
{
var doc=CreateXMLDOM(); //Creat the Null XMLDOM
str = str.split("/r/n").join(""); //delete newline sign and enter sign
str = str.split(" ").join(""); //delete space
str = str.slice(str.indexOf(bstr),str.indexOf(estr)); //intercept a part of the str
str = "<root>"+str+"</root>"; //add the string root node
doc.async=false; //set async is false
doc.loadXML(str); //load the string to build to a XMLDOM Instance (if wanna load a XML file,should use Function "load( [file address string] )" but "loadXML( [string] )" )
return doc; //return doc instance
}
=================================================
CreateXMLDOM() 用来创建一个空的DOM对象,在后面这个空DOM对象通过loadXML方法将字符串生成成一个XMLDOM实例。里面大部分代码用来判断IE兼容性了,这个很重要。
CreatStrDom() 大部分代码是将IFRAME的document.body.innerText里的字符串格式成标准的XML的编写格式,然后再用前面创建的XMLDOM对象生成DOM实例。这个方法的参数不是必要的,是因为我的代码需要这么写而已。
之后的事情就是DOM的操作了。
这样,通过这样,我们就可以利用FORM表单POST方法处理WEBSERVICE的信息了。