我已经创建了一个web服务,并希望从javascript调用它,为此我在我的页面的脚本管理器中注册了ServiceReference,并使用命名空间调用了webservice。
我的问题是我要等到收到来自webservice的回复。
为此,我试图使用setInterval,但这不起作用。
实现这一目标的其他任何方式?
更多详情如下: 在Javascript中如果编写一个函数来调用WebService,则必须向其传递一个方法签名,该签名将在webservice发送响应后调用。
e.g。
var IsResponseReceived;
function GetSomethingFromWebService()
{
IsResponseReceived = 'No';
Namespace.WebServiceClass.GetMeSomething(parameter1,SuccessResponseReceiver);
alert(webServiceResponse);
}
function SuccessResponseReceiver(parameter1,parameter2)
{
IsResponseReceived = 'Yes';
}
在上面的代码中,我的警报每次都给我'不'。我想在alert和webservice调用之间写一些内容,让我等到我得到回复。
我现在清楚了吗?
答案 0 :(得分:4)
如果您考虑使用纯JavaScript(这些天很不寻常),请考虑此代码
var strURL = "localhost/services/foobar.svc";
var xmlHttpReq = false;
var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('GET', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
self.xmlHttpReq.onreadystatechange = function() {
if (self.xmlHttpReq.readyState == 4) {
// do whatever you want to do when your service responded
// you may get the response content using self.xmlHttpReq.responseText
}
}
self.xmlHttpReq.send();
如果您考虑使用jQuery(这是一个流行的JavaScript框架),那就很容易:
$.ajax({
url: "localhost/services/foobar.svc",
success: function(data){
// this is fired on successful response
// you will have response content in data parameter
}
});
答案 1 :(得分:0)
使用XmlHttpRequest(Ajax)并处理回调函数中的响应。
答案 2 :(得分:0)
如果您想同步调用服务,那么您也可以从后面的代码中调用Web服务。默认情况下,主线程会等到你收到服务响应。