我正在尝试使用javascript调用web服务。但它显示的错误就像 selectSingleNode()不是一个方法。我在mozilla firefox中尝试它。当我将XMLHttpRequest更改为ActiveXObject时,它正在探索器中完美地工作。我正在添加我在firefox中尝试的源代码。
<script language="javascript">
// Web Service functionality
// Global vars
var xmlDoc = null;
var _serviceCallback = null;
// Calls web service, web service url and parms, and callback function or null must be provided.
// Callback function receives a true or false based on success of call to host
function callWebService(url, callback)
{
_serviceCallback = callback;
if(xmlDoc == null)
{
// xmlDoc = new XMLHttpRequest();
xmlDoc = new XMLHttpRequest();
}
xmlDoc.onreadystatechange = stateChange; //callback for readystate
xmlDoc.async = true; //do background processing
//xmlDoc.load(url);
xmlDoc.open('GET', url);
xmlDoc.send();
//var doc= xmlDoc.responseXML;
}
// Updates readystate by callback
function stateChange()
{
if (xmlDoc.readyState == 4)
{
var err = xmlDoc.parseError;
var result = false;
var nd;
if(err.errorCode == 0)
{
nd = xmlDoc.selectSingleNode("//envelope/date_time");
if(nd.text != "")
result = true;
}
// perform callback if provided
if(_serviceCallback != null)
_serviceCallback(result, nd == null ? "" : nd.text);
}
}
// Callback supplied to XMLHttpRequest call
function callbackTest(result, data)
{
obj = document.getElementById("txtOuput");
if(result)
obj.value = "Success " + data;
else
obj.value = "Web Service Call Failed";
}
</script>
<input type="button" onclick="callWebService('http://www.hendricksongroup.com/services/WebService.asmx/GetTime?input=Test', callbackTest)" value="Click" />
<input type="text" id="txtOuput"/>
请帮助我......已经杀了我8个小时......
答案 0 :(得分:1)
我建议使用jquery库。它有一些非常漂亮的get,put和ajax调用机制。它将适用于所有浏览器,如果有很多教程和支持论坛可以帮助您解决问题
答案 1 :(得分:1)
首先,您需要使用跨浏览器技术来确保获得有效的XMLHttpRequest对象。
这种方法不仅可以为浏览器提供最佳的XHR,而且还具有“记忆”功能。这意味着工厂逻辑仅执行一次。
您可以在JS here中了解有关调用各种类型服务的更多信息。
function createXHR() {
var xmlhttp, XMLHttpFactories = [
function() {
return new XMLHttpRequest();
}, function() {
return new ActiveXObject("Msxml2.XMLHTTP");
}, function() {
return new ActiveXObject("Msxml3.XMLHTTP");
}, function() {
return new ActiveXObject("Microsoft.XMLHTTP");
}
];
for (var i = 0; i < XMLHttpFactories.length; i++) {
try {
xmlhttp = XMLHttpFactories[i]();
this.createXHR = XMLHttpFactories[i];
return xmlhttp;
} catch (e) { }
}
}
其次,您需要使用crossbrowser技术来使用xml。您可以向http://www.w3schools.com/Xml/xml_parser.asp
学习if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(text,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
}
OR
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else // Internet Explorer 5/6
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET","books.xml",false);
xhttp.send("");
xmlDoc=xhttp.responseXML;
答案 2 :(得分:0)
我建议使用JSON。它非常简单,浏览器兼容性由JSON scrypting处理。
就像使用代理调用webservice,调用公共函数并传递值(如果有的话)。此代码仅适用于.NET。
创建网络服务,不要忘记添加ScriptService标签。
// Summary description for RScriptService /// </summary>
[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.Web.Script.Services.ScriptService()] public class ProfileService : System.Web.Services.WebService {Public string ExecuteCommand(param, param,param){}
}
在您的aspx文件中添加脚本条目
<cc1:ToolkitScriptManager ID="ScriptManager1" AsyncPostBackTimeout="600" runat="server" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError"EnablePageMethods="true"><Services><asp:ServiceReference Path="ProfileService.asmx"/></Services></cc1:ToolkitScriptManager>
使用Javascript代码调用这些网络服务。
//Call the function function GetProfileDetails(){ProfileService.ExecuteCommand(request1,request2, OnGetProfileDetailsSuccess, OnGetProfileDetailsError);}
//Call back for succes function OnGetProfileDetailsSuccess(result){for (var property in result) {//get the result result[property];}}
//Call back for error function OnGetProfileDetailsError(error) {alert("An error occured while executing command<br/>" + error.get_message());}
希望这会有所帮助..