2011-11-22 94 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加載和卸載,所以我不能從服務器端 –