2012-07-05 17 views
5

我使用Knockout.js讓我的web應用程序下面的錯誤問題與淘汰賽,不能使用「在」操作符來搜索「長度」

Cannot use 'in' operator to search for 'length' 

我的代碼:

$(document).ready(function() { 
     AjaxRequest(); 
    }); 

    function AjaxRequest() { 
     $.post("../../Api/DisabilitiesHandler.ashx?method=get", function (data) { 
      var viewModel = { 
       disabilities: ko.observableArray(data) 
      }; 

      ko.applyBindings(viewModel, document.body); 
     }); 
    } 

<table> 
    <tbody data-bind="template: { name: 'disabilitiesRowTemplate', foreach: disabilities }"></tbody> 
</table> 

<script type="text/html" id="disabilitiesRowTemplate"> 
    <tr> 
     <td>Name: 
      <input data-bind="value: Name" /></td> 
     <td> 
      Active <input type="checkbox" data-bind="checked: Active" /></td> 
    </tr> 
</script> 

這是我的模型

public class Disabilities 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool Active { get; set; } 
} 

,這是Web服務的代碼

context.Response.ContentType = "application/JSON"; 
DbsaDal.Entities.DBSAEntities db = new DbsaDal.Entities.DBSAEntities(); 
List<DbsaDal.Model.Disabilities> disabilities = DbsaDal.Entities.Disabilities.Get(db); 
context.Response.Write(new JavaScriptSerializer().Serialize(disabilities)); 

任何建議怎麼辦?我已經到處找在網絡上,並不能找到什麼有用的東西

更新1:

Uncaught TypeError: Cannot use 'in' operator to search for 'length' in [{"Id":1,"Name":"Blind","Active":false},{"Id":2,"Name":"Mute","Active":true}] Knockout.js:92 
+0

你在JavaScript中得到這個錯誤?如果是這樣,你的瀏覽器調試器會指出錯誤發生的地方。你能發佈錯誤發生的代碼嗎? – 2012-07-05 12:05:04

+0

發佈完整的錯誤消息,行號和文件 – Esailija 2012-07-05 12:08:12

+0

我已更新我的問題。錯誤發生在Knockout.js文件中 – Armand 2012-07-05 12:12:07

回答

5

,我發現我的問題:

disabilities: ko.observableArray(data) 

這段代碼應該已經

disabilities: ko.observableArray(ko.utils.parseJson(data)) 
+4

你也可以告訴$ .post函數你期待json響應,jQuery會自動將它解析成一個JavaScript對象: '$ .post(「url」,function(data){},'json' );' http://api.jquery.com/jQuery.post/ – 2012-07-05 21:36:36