2016-11-02 45 views
0

我的問題很簡單。你可以從另一個web服務的Success函數調用C#web服務嗎?我認爲答案是否定的。從另一個Webservice的Success函數調用C#webservice?

我有一個登錄webservice,當用戶嘗試做某些事情需要用戶登錄時調用。然後調用另一個webservice,當動作完成時它不會進入onSuccess函數。我認爲它不能這樣做?它是否正確?

示例代碼,而不是實際的代碼。

webservice.login(onLoginSuccess) 

function onLoginSuccess(){ 

    webservice.doSomething(onDoSomethingSuccess) 

} 

function onDoSomethingSuccess(){ 

    .... does not get here. 

} 

這是它的代碼,它是裸露的骨頭。

在客戶端JavaScript調用上,成功登錄webservice。

function onLoginSuccess(result){ 


    negotiateWithUser(true, 
         activeUser.id, 
         negotiation.dateID, 
         activeUser.showChat, 
         true); 
} 


function negotiateWithUser() { 

    <code> 

    if (justLoggedIn) updateDateData(); 

    <code> 
} 

function updateDateData(){ 
    if (populate==false){ 

     populate=true;  
     WebService.Negotiations.DatesGet(activeUser.id,SucceededtoCallbackDateRefresh, ErrorHandler);   
    } 
} 

不進入功能SucceededtoCallbackDateRefresh即使返回的數據並沒有錯誤。

我想我知道問題出在哪裏,在negotiateWithUser函數中調用updateDateData,執行控制返回給negotiateWithUser函數,而不是進入SucceededtoCallbackDateRefresh成功函數,因爲它是異步調用。我認爲需要某種回調函數。

我通過調用onLoginSuccess函數中的setInterval()中的updataDateData函數來解決問題。

function onLoginSuccess(result){ 

     if (negotiate) {    
      timerInterval = setInterval("updateDateData()", 300); 
     } 

} 

它的工作原理。如果有人有更優雅的方法,我會非常感興趣。
謝謝。

+0

您*可以*。這並不一定是一個好主意。仔細地踩踏:) –

+0

感謝大衛,但它似乎並不適合我。 – Welshboy

+0

嗯,你提到這不是你的實際代碼,所以我沒有太具體的評論它。如果它不起作用,我建議的第一件事就是確保您對服務的引用是正確的 - 如果您發佈了更具代表性的代碼段,可能會有所幫助。 –

回答

0

你一定可以。

只是在理論上給出一個建議/建議,你可以有1個局部變量作爲第一個Web服務方法的狀態響應,你可以把它作爲布爾值來表示第一次調用的成功。然後,如果您的本地變量符合您的成功條件,則可以依次調用其他Web服務方法。

我提供的僅僅是一個想法,對於更具體的答案,我建議您張貼您正在處理的實際代碼。

謝謝。

1

如何使用jQuery.ajax()?

function Func1() { 
    $.ajax({ 
     url:'MyWebService.asmx/Func1', 
     success:Func1Success, 
     error: function() { 
      alert('there was an error!'); 
     }, 
    }); 
    return false; 
} 
function Func1Success(output){ 
    $.ajax({ 
     url:'MyWebService.asmx/Func2', 
     success:Func1SuccessToSuccess, 
     error: function() { 
      alert('there was an error!'); 
     }, 
    }); 
} 
function Func1SuccessToSuccess() { 
    return false; 
} 
0

我假設您在服務器上使用.cs文件,然後從android調用它們。 如果這是你正在做的事情,那麼有一種方法可以調用另一種方法成功的方法。只需將兩個.cs文件表示爲x和y並將其存儲在您的服務器上即可。然後從android(x)調用其中的一個,然後在x中創建y的對象,這將成爲全部。例如 。這是我從android中調用的一個名爲abc.cs的.cs文件。

[WebMethod] 
public xyz IsLoggedIn() 
{ 
    xyz example = new xyz(); 
    //do something 
    . 
    . 

    return example; 
    } 

現在xyz.cs將是:

[WebMethod] 
public void onSuccessofIsLoggedIn() 
{ 
    //do something 
    . 
    . 
    } 

我希望這有助於....所有這些只是基於假設,儘管...請清楚你正在使用什麼,我們也會在我們的答案中更清楚。