2013-03-16 1 views
1

Вот мой код:window.location не работает с функцией вызова сервера с signalR

<input type="button" id="SignOut" value="SignOut" onclick="logout();" /> 

ServerSide:

public void ondisconnected() // when the user is disconnected 
{ 
    try 
    { 
     DataRow[] UserRow = ConnectedClientDt.Select("ConnectionID='" + Context.ConnectionId + "'"); 
     int ClientID = Convert.ToInt32(UserRow[0][0]); 
     new SQLHelper(SQLHelper.ConnectionStrings.WebSiteConnectionString).Update("Update clients set USER_STATUS='F' where CLIENT_ID=" + ClientID); 
     string query = " Select FRIEND_ID from friends where CLIENT_ID= " + ClientID; 
     DataTable FriendsDt = new SQLHelper(SQLHelper.ConnectionStrings.WebSiteConnectionString).getQueryResult(query); 
     for (int i = 0; i < FriendsDt.Rows.Count; i++) 
     { 
      DataRow[] FrRow = ConnectedClientDt.Select("ClientId=" + FriendsDt.Rows[i][0] + ""); 
      if (FrRow.Length > 0) 
       Clients.Client(FrRow[0][2].ToString()).userDisconnected(ClientID); 
     } 
     DeleteUser(Context.ConnectionId); 
    } 
    catch (Exception ex) 
    { 
     return ; 
    } 
} 

клиентской:

function logout() { 
    $.connection.chatHub.server.ondisconnected(); 
    setTimeout(window.location= "LoginPage.aspx?action=logout", 5000); 
} 

Когда я нажимаю кнопку ondisco nnected функция не excuting, но когда я удалить SetTimeout линию код работает нормально без каких-либо проблем: s

ответ

3

Этот следующий бит кода будут вызывать window.location момент Оценивается, что не то, что вы хотели:

setTimeout(window.location= "LoginPage.aspx?action=logout", 5000); 

Понадобится:

setTimeout(function(){window.location="LoginPage.aspx?action=logout"}, 5000); 

обертывания код в функции он будет выполняться только тогда, когда функция вызывается, которая будет происходить через 5 секунд. Ваша предыдущая версия немедленно оценила бы window.location, то есть signalr не успел бы связаться с сервером.

+0

@sora нет проблем :) Хорошее место для чтения о 'setTimeout' находится здесь: https://developer.mozilla.org/en/docs/DOM/window.setTimeout – Pebbl

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