利用FORM表单提交到WEBSERVICE后获得XML文档但不跳转的方法

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的信息了。

posted @ 2007-05-11 16:08  ZetaChow晓代码  阅读(384)  评论(0编辑  收藏  举报