2012-04-13 132 views
-2

我控制器如何從json獲取數據?

var subCategories = m_listsRepository.GetSubCategories(id); 
var items = subCategories.Select(x=>new MyDataNameAndId(){Id = x.Value, Name = x.Text}); 
return Json(items); 

和Ajax:

$.ajax({ 
     url: urlString, 
     type: 'POST', 
     data: JSON.stringify({ id: districtId }), 
     dataType: 'json', 
     contentType: 'application/json', 
     cache: 'false', 
     success: function (data) { 
      alert("success"); 
      $.each(data, function (key, MyDataNameAndId) { 
       alert(key);//== 0 
       alert(MyDataNameAndId);// then throws 
       $('select#ChangeOnsubCategoryId').append('<option value="0">Select One</option>'); 

       $.each(MyDataNameAndId, function (index, manager) { 
        $('select#ChangeOnsubCategoryId').append(
          '<option value="' + manager.Id + '">' 
          + manager.Name + 
          '</option>'); 
       }); 
      }); 
     } 
    }); 

我究竟做錯了什麼?

更新: 控制器工作。 警報(「成功」); - 顯示 警報(鑰匙); - 顯示0 alert(MyDataNameAndId); - 不顯示。 我需要在'select#ChangeOnsubCategoryId'選項中生成select#ChangeOnsubCategoryId

這是怎麼回事?這個明白嗎?

我不知道如何表達什麼通過JSON

JSON字符串:

[{"Id":"53","Name":"футбол"}] 
+0

杜,你至少可以告訴我們什麼是不工作的。 – alexn 2012-04-13 10:25:05

+0

有問題嗎?如果是,那是什麼?請解釋你的問題,不要只是發佈一些代碼,讓我們找出其餘的。在任何情況下,如何訪問特定數據結構的屬性和數組元素都是本地化的IMO。看看'data'的結構,學習如何訪問對象屬性並對其進行排序。 – 2012-04-13 10:25:12

+0

你可以發佈一個收到JSON的例子嗎?如果你在成功回調中使用console.log數據,你又會得到什麼? – GillesC 2012-04-13 10:25:48

回答

0

從你寫出來的JSON輸出,我把它改寫這樣一點點:

$.ajax({ 
    url: urlString, 
    type: 'POST', 
    data: JSON.stringify({ id: districtId }), 
    dataType: 'json', 
    contentType: 'application/json', 
    cache: 'false', 
    success: function (data) { 
     if (!data) return; // if data is empty, return 

     var $select = $('select#ChangeOnsubCategoryId'); 
      // put the select element in a variable so you don't need to 
      // jquery select it again 

     $select.append('<option value="0">Select One</option>'); 
      // I guess you first want to add a "select one" option 

     // data should be an array e.g. [{"Id":"53","Name":"футбол"}] 
     $.each(data, function (key, manager) { 
      // for each "manager" in the "data" array 

      // manager should be an object in the data 
      // array e.g. {"Id":"53","Name":"футбол"} 
      // no need to for each it 

      $select.append(
        '<option value="' + manager.Id + '">' 
        + manager.Name + 
        '</option>'); 
      // add the manager in the select box 
     }); 
    } 
}); 

雖然我假設的東西。使用JavaScript調試器(例如Chrome中的開發人員工具或Firefox中的Firebug)來檢查您從ajax調用中獲得的值。將斷點放入函數中,然後觀察數據變成了什麼(在這種情況下,它應該是包含Id和Name的對象數組)。

0
$.each(MyDataNameAndId, function (index, manager) { 
       $('select#ChangeOnsubCategoryId').append(
         '<option value="' + manager.Id + '">' 
         + manager.Name + 
         '</option>'); 
      }); 

應該只是

$('select#ChangeOnsubCategoryId').append(
     '<option value="' + MyDataNameAndId.Id + '">' 
     + MyDataNameAndId.Name + 
     '</option>'); 

的示例代碼工作對我來說沒有這使我相信有一些錯誤返回的JSON例外。檢查它是否實際返回您發佈的字符串。