2013-03-14 82 views
0

我有一個Ajax函數,從SQL查詢填充DataTable並返回它我的問題是,我無法找到一個解決方案,從JavaScript讀取DataTable是他們的任何特定方式來做到這一點?從javascript讀取數據表

代碼:

[WebMethod] 
public static DataTable SendOnlineContacts(int ClientID) 
{ 

    string query = " Select fr.FRIEND_ID,cl.USER_NAME,cl.PROFILE_PIC " 
        +" from clients cl inner join friends fr on cl.CLIENT_ID =fr.FRIEND_ID " 
        +" where fr.CLIENT_ID= "+ ClientID ; 
    return new SQLHelper(SQLHelper.ConnectionStrings.WebSiteConnectionString).getQueryResult(query); 
} 

提供SQLHelper(SQLHelper.ConnectionStrings.WebSiteConnectionString).getQueryResult(查詢)是我創建只是爲了簡化我的工作一類,這功能在默認情況下返回一個DataTable

+0

您的ajax代碼請 – 2013-03-14 08:25:59

+0

@Sora您如何將此返回給您的客戶端? – Alex 2013-03-14 08:26:20

+0

我編輯我的代碼請檢查,我打電話給我的功能從客戶端,但在成功我不知道如何閱讀DataTable – Sora 2013-03-14 08:27:58

回答

0

我建議你使用標準格式在服務器端和客戶端之間交換數據。 .net數據表是一個強大且複雜的對象。但客戶端本身不需要數據表,而是客戶端需要它的數據。 所以我認爲重點是:如何將數據從服務器傳遞到客戶端。

如果您管理的數據結構是普通結構,那麼使用字符串是一種簡單的解決方案。雖然,如果你想要更多的靈活性和更通用的方法,字符串操作可能很容易變成地獄。 所以我認爲使用結構化格式(例如JSON)可能是更好的解決方案。

最終,您需要向客戶端呈現數據。我通常使用Jayrock以JSON格式向客戶端呈現數據。看一看。

來實現您的解決方案的步驟可以是:

  1. [服務器端]實施的處理程序:從你的後端檢索數據,將它們序列化到JSON,並公開他們
  2. [客戶端]實現一個JavaScript客戶端(如果你喜歡這個解決方案,一個Jayrock代理),它調用處理程序,檢索數據並在DOM中呈現它們。
0

我只是找到了解決這個問題的好方法:),這對其他用戶可能會有所幫助,所以如果DataTable返回多行,我會將其作爲答案 發佈,我會將每行讀作一個字符串並將';'在它的結束不是在該行,我會把每列「」這樣我就可以在以後讀我會表明,在代碼

服務器端:

[WebMethod] 
public static string SendOnlineContacts(int ClientID) 
{ 
    string result=""; 
string query = " Select fr.FRIEND_ID,cl.USER_NAME,cl.PROFILE_PIC " 
       +" from clients cl inner join friends fr on cl.CLIENT_ID =fr.FRIEND_ID " 
       +" where fr.CLIENT_ID= "+ ClientID ; 
DataTable Dt= SQLHelper(SQLHelper.ConnectionStrings.WebSiteConnectionString).getQueryResult(query); 
if(Dt.Rows.Count>0) 
    { 
     for(int i=0;i<Dt.Rows.Count;i++) 
    { 
     result+=Dt.Rows[i][0]+","+Dt.Rows[i][1]+";" ; 
    } 
    return result; 
    } 
} 

客戶端

$.ajax({ 
    type: 'POST', 
    url: 'ChatPageTest.aspx/SendOnlineContacts', 
    data: '{ClientID:"' + ClientID+ '"}', 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function (data) { 
     var Res=data.d.split(';'); 
     for(i=0;i<Res.length;i++) 
     { 
      var Fres=Res[i].split(','); 

     } 
    }); 
+0

雖然它現在正常運行,但一旦返回的數據中包含任何內容「,「 要麼 」;」你的代碼會中斷。這個解決方案不好,更多的是一種駭人的方式。 – 2013-03-14 09:32:40

+0

我只是把「,」「;」因爲你可以用一個字符來分割一行,並且可以用另一個字符來分割行中的數據,我們可以使用任何其他特殊字符,而且你是對的,但是我使用了那些2個字符的bcs,我的dataTable不包含任何這些字符 – Sora 2013-03-14 10:17:24