2011-11-22 68 views
1

我已经创建了一个web服务,并希望从javascript调用它,为此我已在我的页面的脚本管理器中注册了ServiceReference,并使用名称空间调用了webservice。从JavaScript调用webservice并等待响应

我的问题是,我想等到webservice收到响应。

为此,我试图使用setInterval但不起作用。

有没有其他办法可以达到这个目的?

更多细节如下: 在Javascript中如果您编写一个调用WebService的函数,您必须将它传递给一个方法签名,该方法签名将在webservice发送响应之后调用。

例如

var IsResponseReceived; 
function GetSomethingFromWebService() 
{ 
    IsResponseReceived = 'No'; 
    Namespace.WebServiceClass.GetMeSomething(parameter1,SuccessResponseReceiver); 
    alert(webServiceResponse); 
} 

function SuccessResponseReceiver(parameter1,parameter2) 
{ 
    IsResponseReceived = 'Yes'; 
} 

在上面的代码中,我的警报每次都给我'不'。我想在alert和webservice调用之间写几行,让我等到得到回应。

我现在清除吗?

+0

请给我们一些代码。 – Rodolphe

+0

另外,你是否可以更具体地说明你的意思,等待直到收到webservice的响应? – MilkyWayJoe

回答

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 
    } 
}); 
+0

谢谢,但我想等待我的JavaScript代码,直到响应来自webservice,因为我们知道它运行异步并且不等待响应,而是调用作为参数传递的方法引用。我的问题是我不能在第二行执行代码,直到我得到回应。 –

+0

请问您能描述一下,请问**是什么意思? –

+0

我编辑了帖子,请检查。 –

0

使用XmlHttpRequest(Ajax)并处理回调函数中的响应。

0

如果你想同步调用服务,那么你也可以从后面的代码调用web服务。默认情况下,主线程将等待您收到来自服务的响应。

+0

在我的代码中,回发到服务器将导致lotd的viewstate加载和卸载,所以我不能从服务器端 –