【问题标题】:How to getelementbytagname from specific asp.net web service如何从特定的 asp.net Web 服务获取elementbytagname
【发布时间】:2015-11-20 01:03:17
【问题描述】:

拜托,我在一个带有 PhoneGap 项目的 js 文件上使用 getElementsByTagName 命令遇到了一个小问题。我正在使用一个运行良好的 asp.net 网络服务,但我没有得到网络服务返回我的结果,即来自<IngresarRegistroMovilResult> 标记的string

这是我接收网络服务返回的函数:

function processResult() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        var theXML = xmlhttp.responseXML.documentElement;
        var resultadoWebService = theXML.getElementsByTagName('string')[0].firstChild.nodeValue;

        var output = "Resultado: ";
        output += resultadoWebService;

        console.log("Pasamos por processResult, con var output:"+output);

        document.getElementById("resultadows").innerHTML = output;

    }
};

这是网络服务的规范:

POST /servicio.asmx HTTP/1.1
Host: dondeestamifamilia.masterdevelopment.co
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <IngresarRegistroMovil xmlns="http://dondeestamifamilia.masterdevelopment.co/">
      <hashString>string</hashString>
    </IngresarRegistroMovil>
  </soap12:Body>
</soap12:Envelope>

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <IngresarRegistroMovilResponse xmlns="http://dondeestamifamilia.masterdevelopment.co/">
      <IngresarRegistroMovilResult>string</IngresarRegistroMovilResult>
    </IngresarRegistroMovilResponse>
  </soap12:Body>
</soap12:Envelope>

这是IngresarRegistroMovil方法对应的片段,来自wsdl:

<s:element name="IngresarRegistroMovil">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="hashString" type="s:string"/>
        </s:sequence>
    </s:complexType>
</s:element>
<s:element name="IngresarRegistroMovilResponse">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="IngresarRegistroMovilResult" type="s:string"/>
        </s:sequence>
    </s:complexType>
</s:element>

我试过theXML.getElementsByTagName('string')[0].firstChild.nodeValue; 但我得到:Uncaught TypeError: Cannot read property 'firstChild' of undefinedtheXML.getElementsByTagName('string')[0]; 但我得到:undefinedtheXML.getElementsByTagName('string')[0].nodeValue; 但我得到:Uncaught TypeError: Cannot read property 'nodeValue' of undefined

拜托,您的大力支持对我来说非常宝贵。

谢谢。

【问题讨论】:

    标签: javascript asp.net web-services cordova getelementsbytagname


    【解决方案1】:

    标记名是IngresarRegistroMovilResult 而不是string,您可以通过theXML.getElementsByTagName('IngresarRegistroMovilResult')[0].textContent 访问(如果我没有打错的话)

    【讨论】:

    • 感谢 deamentiaemundi 的回复。我在 main.js 的第 39 行收到错误消息 Uncaught TypeError: Cannot read property 'textContent' of undefined。错误消息显示“未定义”。它说theXML.getElementsByTagName('IngresarRegistroMovilResult')[0] 未定义。为什么?
    • 嗯...不,mime-type 没问题,但它仍然可能无法返回 DOM。尝试通过在顶部添加来强制 DOM:var parser = new DOMParser();var theXML = parser.parseFromString(xmlhttp.responseXML,"text/xml").documentElement; 如果这不起作用......好吧,我不是那个早点放弃 that 的人 ;-)
    • 好吧,@deamentiaemundi 我发现了一些奇怪的东西:使用 Web 服务的结果具有来自 Web 服务的返回变量的值。也就是说theXML.innerHTML包含C----O,也就是IngresarRegistroMovilResult的字符串值,扁平,不带标签。那么,我得到的错误是试图通过标记名获取返回值。我将结束这个问题。谢谢@deamentiaemundi 的合作。
    • 啊,就是这样!顺便说一句:其他人也可能有这个问题,所以不要关闭这个问题,而是自己回答并检查它作为接受的答案(如果可以,不确定规则)
    【解决方案2】:

    使用 Web 服务的结果具有来自 Web 服务的返回变量的值。换言之,XML.innerHTML 包含 C----O,即 IngresarRegistroMovilResult 的字符串值,扁平,不带标签。那么,我得到的错误是试图通过标记名获取返回值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      相关资源
      最近更新 更多