ローカルドライブ情報をASP.NETでJSON文字列として出力する。 part.4
「JSON = オブジェクトリテラル」と何年間も認識していたため、正しい書式が分からなかっただけでした。
下記のように修正することで動作を確認できた!
■ ソースコード (aspx.cs) 抜粋
private static string GetDriveSize() { var sb = new StringBuilder(); var list = GetDriveTypes(); // 設定ファイルに設定がない場合はローカルディスクのみの情報を取得する。 if (list == null || list.Count <= 0) { list = new List<DriveType>(); list.Add(DriveType.Fixed); } sb.Append("["); var loop = 0; var infos = DriveInfo.GetDrives(); foreach (var item in infos) { // HDDの種類でフィルタリングする if (list.Exists(x => x == item.DriveType)) { var a = new Decimal(item.TotalFreeSpace); var b = new Decimal(item.TotalSize); var c = (a / b) * 100; c = Decimal.Round(c, 2); // HDDの情報を設定 if (0 < loop) { sb.Append(","); } sb.Append("{"); sb.AppendFormat("\"dl\":\"{0}\"", item.Name.Replace(":\\", "")); //DriveLetter sb.AppendFormat(",\"s\":{0}" , item.TotalSize); //Size sb.AppendFormat(",\"ts\":{0}" , (item.TotalSize - item.TotalFreeSpace)); //TotalSize sb.AppendFormat(",\"tfs\":{0}" , item.TotalFreeSpace); //TotalFreeSpace sb.AppendFormat(",\"r\":{0}" , c); //Rate sb.Append("}"); loop++; } } sb.Append("]"); return sb.ToString(); }
■ ソースコード (js)
var action_ajax = function (target, url) { // 対象のタグが存在していること、且つAjax通信中出ないこと if (target && (this.ajax !== true)) { // 多重送信防止用のフラグ this.ajax = true; var call_obj = this; $.ajax({ url: url , cache: false , dataType: "json" , success: function (json, status, xhr) { var html = '<table>'; html += '<tr>'; html += '<th>ドライブレター</th>'; html += '<th>容量</th>'; html += '<th>使用量</th>'; html += '<th>空き容量</th>'; html += '<th>比率</th>'; html += '</tr>'; for (var cnt = 0; cnt < json.length; cnt++) { var item = json[cnt]; html += '<tr>'; html += '<td>' + item.dl + '</td>'; html += '<td>' + item.s + '</td>'; html += '<td>' + item.ts + '</td>'; html += '<td>' + item.tfs + '</td>'; html += '<td>' + item.r + '</td>'; html += '</tr>'; } html += '</table>'; $(target).html(html); } , complete: function (xhr, status) { // 処理完了後は送信フラグをOFFにする。 call_obj.ajax = false; if (status != "success") { $(target).html("Ajaxエラー: " + status); } } }); } } $(window).load(function () { action_ajax("#view", "Default.aspx"); });
_