Web Services 访问HTML页面上回调函数中.NET Web服务的响应

qq24tv8q  于 2023-03-19  发布在  .NET
关注(0)|答案(2)|浏览(140)

我正在尝试从HTML页面调用.net webservice。此HTML页面将托管在不同的服务器上。我为此使用以下HTML代码。webservice代码在HTML代码下面。此代码在IE中运行良好,在用venkman调试时在Mozilla中运行良好。但在Firefox中正常执行时失败。我在xmlDoc变量或http. responseXML或http.responseText或http. status中没有得到任何内容。
我还在错误控制台中收到此错误“Error:xmlDoc未定义行:104英寸
我想问题在于匿名回调函数不能访问外部的任何东西。

enter code here


<script language="JavaScript">      

    var http =  null;<br>
    var isFirefox = false;<br>
    var StrInput;<br>
    var xmlDoc;<br>
   alert('Hi');<br>
function getXMLHTTP()<br>
{<br>
    var httpReq = null;<br>
<br>
    // Internet Explorer<br>
    try<br>
     {
     httpReq = new ActiveXObject("Msxml2.XMLHTTP");<br>
     }<br>
    catch (e)<br>
     {<br>
        try<br>
        {<br>
            httpReq = new ActiveXObject("Microsoft.XMLHTTP");<br>
        } <br>
        catch(oc)<br>
        {<br>
            httpReq = null;<br>
        }<br>
     }<br><br>
    // Firefox, Opera 8.0+, Safari..create object for webservice request<br>
    **if(!httpReq && typeof XMLHttpRequest != "undefined") <br>
        {<br>
            httpReq = new XMLHttpRequest();<br>
            isFirefox = true;<br>
        }**<br>
    return httpReq;<br>
}<br>
    <br>
function callGetLatestPoll()<br>
{<br>
debugger;<br>
    StrInput = document.DemoForm.StrInput.value;<br>
//alert('in callGetLatestPoll');<br>
    var url = "http://localhost/ICG_webservice/Service.asmx/StoretoDB";<br>
    var params = "inputstring="+StrInput;<br>
    <br>
<br>
    http = getXMLHTTP();<br>
            <br>
<br>
    //http.responseText;<br>
   // http.overrideMimeType('text/xml');  <br> 
    http.onreadystatechange = function() {<br>
        //Call a function when the state changes.<br>
        if(http.readyState == 4) <br>
        {<br>
            if(isFirefox)<br>
               {<br>
               //xmlDoc = http.responseText;<br>
               //xmlDoc = http.responseText;<br>
               //http.overrideMimeType('text/xml');  <br>         
               //xmlDoc = http.responseXML;  <br>   
               //alert(http.responseXML);    <br>   
               //alert(http.status);<br>
               **fetchforfirefox()**<br>
               }<br>
            else if(http.status == 200)<br>
               {<br>
               //xmlDoc = http.responseXML;<br>
               xmlDoc=http.responseXML;<br>
               fetchlatestpoll()<br>
               }<br>
        }<br>
     }<br>
     http.open("POST", url, true);<br>
    //Send the proper header information along with the request<br>
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");<br>
    http.setRequestHeader("Content-length", params.length);<br>
    http.setRequestHeader("Connection", "close");<br>
<br>
    http.send(params);<br>
    //http.send();<br>
}<br>
<br>
function fetchlatestpoll()<br>
{debugger;<br>
        ////alert(xmlDoc.text);<br>
        alert(xmlDoc);<br>
        // code for reading and displaying data for internet explorer<br>
        b1 = xmlDoc.documentElement;<br>
        //alert(b1.childNodes.item(0).text);<br>
}<br>
<br>
function fetchforfirefox()<br>
{<br>
<br>
    alert('ff:step1');<br>
    //isFirefox=true;<br>
    //code for reading and displaying data for firefox<br>
     debugger;<br>
     alert('test');//works till here<br>
     alert(xmlDoc);**//just doesnt work in Firefox but works with venkman debugger**<br>
     var employees,i ;<br>
     employees = xmlDoc.getElementsByTagName("abc");<br>
    for(var i=0; i<employees.length; i++)<br>
     {<br>
        alert(employees[i].childNodes[0].nodeValue);<br>
    }<br>

  <br>
}<br>
</script><br>
</head><br>
<body>  <br>
<form id="DemoForm" name="DemoForm"><br>
<input type="text" name="StrInput" id="StrInput"/><br>
**<!--the button below is clicked to call webservice -->**<br>
<button onclick="callGetLatestPoll()">Save</button> <br>
</form><br>

******************webservice code*************************<br>
    [WebMethod]
    public System.Xml.XmlDataDocument  StoretoDB(string inputstring) {
        string returnVal = string.Empty;

        returnVal = dataHandlerObj.StoretoDB(inputstring);

        System.Xml.XmlDataDocument xmldoc = new System.Xml.XmlDataDocument();
        xmldoc.InnerXml = "<abc>"+returnVal+"</abc>";

        return xmldoc;
     }
vtwuwzda

vtwuwzda1#

此HTML页面将托管在其他服务器上。
不可能。Javascript无法访问来自其他域的内容。您可以让它在localhost上工作,但部署时会失败。

8xiog9wr

8xiog9wr2#

为了使用XML Web服务,两者需要在相同的域和端口上,或者您需要创建一个代理。尝试使用JSON,它将允许您使用javascript访问Web服务。

相关问题