从javascript调用webservice并等待响应

时间:2011-11-22 14:51:41

标签: javascript asp.net web-services intervals

我已经创建了一个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调用之间写一些内容,让我等到我得到回复。

我现在清楚了吗?

3 个答案:

答案 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服务。默认情况下,主线程会等到你收到服务响应。