2011-11-22 3 views
1

Я создал веб-сервис и хочу называть его из javascript, для этого я зарегистрировал ServiceReference в диспетчере сценариев моей страницы и назвал webservice с использованием пространства имен.вызов webservice из javascript и ожидание ответа

Моя проблема в том, что я хочу дождаться ответа от полученного веб-сервиса.

Для этого я пытался использовать setInterval, но это не работает.

Любой другой способ достичь этого?

Подробнее см. Ниже: В Javascript Если вы пишете функцию для вызова WebService, вы должны передать ей подпись метода, которая будет вызываться после того, как webservice отправит ответ.

например.

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

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

В приведенном выше коде мое предупреждение дает мне «Нет» каждый раз. Я хочу написать someline inbetween alert и вызов webservice, который должен позволить мне подождать, пока я не получу ответ.

Am I Clear сейчас?

+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

Не могли бы вы описать, что вы подразумеваете под ** wait **? –

+0

Я отредактировал сообщение, пожалуйста, проверьте. –

0

Используйте XmlHttpRequest (Ajax) и обработайте ответ в вашей функции обратного вызова.

0

Если вы хотите вызвать службу синхронно, вы также можете вызвать веб-сервис из кода. По умолчанию основной поток будет ждать, пока вы не получите ответ от службы.

+0

В моем коде postback to server заставит лотд из viewstate загружаться и выгружаться, поэтому я не могу это сделать с серверной стороны –

Смежные вопросы