получить ответ от веб-службы .NET в функции обратного вызова на HTML-странице - PullRequest
1 голос
/ 03 февраля 2010

Я пытаюсь вызвать веб-сервис .net со страницы HTML.Эта HTML-страница будет размещена на другом сервере.Я использовал следующий HTML-код для этого.Код веб-сервиса находится ниже HTML-кода.Этот код прекрасно работает в IE и отлично работает в Mozilla при отладке с помощью venkman.Но не удается в обычном исполнении в Firefox.Я не получаю ничего в переменной xmlDoc или http.responseXML или http.responseText или http.status.

Я также получаю эту ошибку в консоли ошибок «Ошибка: xmlDoc не определена* Думаю, проблема в том, что функция анонимного обратного вызова не может получить доступ к чему-либо извне.

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;
     }

Ответы [ 2 ]

0 голосов
/ 03 февраля 2010

Чтобы использовать веб-сервис XML, оба должны быть в одном домене и на одном порте, или вам нужно будет создать прокси. Попробуйте поискать JSON , который позволит вам использовать javascript для доступа к веб-сервису.

0 голосов
/ 03 февраля 2010

Эта HTML-страница будет размещена на другом сервере.

Невозможно. Javascript не может получить доступ к контенту из другого домена. Вы можете заставить его работать на локальном хосте, но при развертывании он потерпит неудачу.

...