1

我正在尝试从 HTML 页面调用 .net 网络服务。此 HTML 页面将托管在不同的服务器上。我为此使用以下 html 代码。网络服务代码在 HTML 代码下方。这段代码在 IE 中运行良好,在使用 venkman 调试时在 Mozilla 中运行良好。但在 Firefox 中无法正常执行。我在 xmlDoc 变量或 http.responseXML 或 http.responseText 或 http.status 中没有得到任何东西。

我也在错误控制台“错误: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;
     }
4

2 回答 2

0

为了使用 XML Web 服务,两者都需要位于相同的域和端口上,否则您需要创建一个代理。尝试查看允许您使用 javascript 访问网络服务的JSON 。

于 2010-02-03T16:50:48.410 回答
0

此 HTML 页面将托管在不同的服务器上。

不可能的。Javascript 无法访问来自不同域的内容。你可以让它在 localhost 上工作,但在部署时它会失败。

于 2010-02-03T16:49:06.637 回答