2014-03-05 29 views
1

我有一個WebMethod,將讀取一個CSV文件的第一行以獲得列標題,每個項目存儲在列表中,我將返回Ajax調用。這是代碼:迭代返回C#連載名單<string> jQuery中

[WebMethod] 
    public static string getAvailableSensors() 
    { 
     List<string> sensors = new List<string>(); 
     try 
     { 
      string path = "C:\\.....\\TestData3.csv"; 
      string line; 
      using (StreamReader sr = new StreamReader(path)) 
      { 
       line = sr.ReadLine(); 
       sensors = line.Split(',').ToList(); 
      } 
     } 
     catch (Exception ex) 
     { 
      string error = ex.Message; 
     } 
     JavaScriptSerializer jss = new JavaScriptSerializer(); 
     string output = jss.Serialize(sensors); 
     return output; 
    } 

這就是數據看起來,當它返回到AJAX調用,比如: enter image description here

這是我的AJAX的樣子:

$.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "WebSockets.aspx/getAvailableSensors", 
      async: false, 
      data: "{ }", // send an empty object for calls with no parameters 
      success: function (result) { 
       debugger; 
       data = result.d; 
       for (var i in result.d) { 
        sensors.push(result.d[i]); 
       } 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert("an error has occured: " + xhr.responseText); 
      } 
     }); 

但這隻會填充數組1的字符,這不是我想要做的。

我無法弄清楚如何遍歷這個該死的JSON,這樣我可以填充我var sensors = new Array();與列。 EX(傳感器[0]應該是「時間」,傳感器[1]應該是「X阿塞爾LH」)等

+0

什麼是錯誤您收到? – shenku

+0

沒有收到錯誤。更像是有一個問題正確迭代返回的數據。我試過的每個想法一次只能返回1個字符 – user1084319

回答

4

首先你需要使該字符串作爲一個對象。使用jQuery.parseJSON()作爲對象。

data=jQuery.parseJSON(data); 

在你的情況,你可以使用數據,如一個字符串數組

+1

非常感謝。你只保存了一臺電腦和一個窗口。我有一段時間沒有這樣做,所以我忘了jQuery.parseJSON – user1084319

0

你可以只從你的Web方法返回一個IList<string>而不是手動序列化的。

[WebMethod] 
public static IList<string> getAvailableSensors() 
{ 
    List<string> sensors = new List<string>(); 
    string path = "C:\\.....\\TestData3.csv"; 
    string line; 
    using (StreamReader sr = new StreamReader(path)) 
    { 
     line = sr.ReadLine(); 
     sensors = line.Split(',').ToList(); 
    } 
    return sensors; 
} 

此外,您的錯誤處理不是exaclty正確的。對於客戶端,即使服務器端出現錯誤,操作也會成功。我只是刪除你嘗試趕上讓異常傳播到客戶端。

1

在你的AJAX選項,你應該設置dataType: 'json',以便響應正在傳遞到您的回調之前自動轉換爲JSON。這可能是您期望contentType要做的事情,但實際上它設置了要發送的內容的類型,而不是您希望返回的內容。您可能還想要應用ScriptMethodAttribute並指定返回的結果爲JSON - 我相信這會設置Content-Type標題,以便jQuery可以在沒有在選項中指定格式的情況下自動檢測格式。

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public static string getAvailableSensors() 
{ 
    ... 
} 

的JavaScript

$.ajax({ 
    type: "POST", 
    dataType: "json", // <-- this 
    contentType: "application/json; charset=utf-8", 
    url: "WebSockets.aspx/getAvailableSensors", 
    async: false, 
    data: "{ }", // send an empty object for calls with no parameters 
    success: function (result) { 
     debugger; 
     data = result.d; 
     for (var i in result.d) { 
      sensors.push(result.d[i]); 
     } 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert("an error has occured: " + xhr.responseText); 
    } 
}); 

如果你正在使用jQuery的新版本,你可能想看看與donefail方法更換您的成功和錯誤回調。

$.ajax({ 
     type: "POST", 
     dataType: "json", // <-- this 
     contentType: "application/json; charset=utf-8", 
     url: "WebSockets.aspx/getAvailableSensors", 
     async: false, 
     data: "{ }", // send an empty object for calls with no parameters 
}) 
.done(function(result) { 
    debugger; 
    data = result.d; 
    for (var i in result.d) { 
      sensors.push(result.d[i]); 
    } 
}) 
.fail(function(xhr, status, error) { 
    alert("an error has occured: " + xhr.responseText); 
}); 
+0

謝謝你的詳細答案。我一定會記住這一點,以便更好地實施。 – user1084319