我正在尝试从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;
}
2条答案
按热度按时间vtwuwzda1#
此HTML页面将托管在其他服务器上。
不可能。Javascript无法访问来自其他域的内容。您可以让它在localhost上工作,但部署时会失败。
8xiog9wr2#
为了使用XML Web服务,两者需要在相同的域和端口上,或者您需要创建一个代理。尝试使用JSON,它将允许您使用javascript访问Web服务。