2016-08-29 102 views
0

我有一個使用SignalR-2.2.1的客戶端到服務器的請求。在請求之後,服務器將把結果發回給調用者。 這裏是我的JavaScript代碼:C#MVC - 用SignalR從服務器發送消息給呼叫者

$(document).ready(function() { 
    var myHub = $.connection.signalHub; 
    myHub.client.receive = function (tmp) { 
     var obj = $.parseJSON(tmp); 
     //do something 
    }; 
    $.connection.hub.start().done(function() { 
     $('#xxxxx').click(function() { 
      var form = $("form"); 
      form.submit(); 
      myHub.server.sendSomething(); 
     }); 
    }).fail(function (reason) { 
     //do something 
    }); 
}); 

這裏是從我的服務器端

public partial class SignalHub : Hub 
{ 
    public void SendSomething() 
    { 
     Clients.All.receive(MyJson); 
    } 
} 

代碼當我使用Clients.All功能,它完美的罰款。但我想要的是服務器只將結果發回給調用者(發送請求的那個)。 因此,我將Clients.All.receive(MyJson)更改爲Clients.Caller.receive(MyJson)。我更改後,現在客戶端不更新內容。我需要在客戶端指定我的接收函數,它會得到不同的東西嗎?

+0

不,應該有效。瀏覽器控制檯中有什麼? –

+0

@Mark檢查我的回答 –

+0

@SamiKuhmonen它的功能在javascript中不被調用。 theres沒有在控制檯/日誌。 – Mark

回答

1

我的猜測是,因爲您打電話給form.submit();,您可能會導航離開頁面或可能重新加載它,從這種意義上說,在新的/重新加載的頁面之間建立了具有不同「connectionId」的新連接,因此消息打算用於Client.Caller已丟失,因爲它與您導航離開或刷新的頁面上建立的連接相關聯。

您可能想考慮使用AJAX發佈表單數據而不是完整的表單提交。

+0

我也嘗試在表單提交後發送連接ID,並使用'Clients.Client(connectionID).receive(MyJson)'從服務器發回它,但它仍然是一樣的。我會嘗試使用AJAX並更新結果 – Mark

+0

現在它的工作狀態非常好。所以問題出現在'form.submit()'中。在我將其改爲「AJAX調用」並將結果呈現在頁面後,SignalR現在工作正常。多謝, – Mark