access response from .NET webservice in callback function on HTML page
I am trying to call a .net webservice from HTML page. This HTML page will be hosted on a different server. I using the following html code for this. The webservice code is below HTML code. This code runs just fine in IE and runs fine in Mozilla when debugging with venkman. But fails in normal execution in Firefox. I dont get anything in xmlDoc variable or http.responseXML or http.responseText or http.status.
I also get this error in error console "Error: xmlDoc is not defined Line: 104"
I guess the problem is that the anonymous callback function can't access anything outside.
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.&l开发者_StackOverflow社区t;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;
}
This HTML page will be hosted on a different server.
Impossible. Javascript can't access content from a different domain. You may get it to work on localhost, but upon deployment it will fail.
In order to consume an XML webservice, both will need to be on the same domain and port or you will need to create a proxy. Try looking into JSON which will allow you to use javascript to access the webservice.
精彩评论