2017-05-30 7 views
-1

データベースから情報を問題なく送信します。しかし、私はページ内のテーブルを読み込むことができません。しかし、私が何を受け取ったかを知るために注意を払うと、情報はjsonのように見えますが、画像に間違ったイメージを与え続けます。どのように私はそれを修正することができます?Javascript Uncaught ReferenceError - C#

Image is here with error and alert.

マイHTML:

<!DOCTYPE html> 
<script src="Scripts/knockout-3.4.2.js" type="text/javascript"></script> 
<script src="Scripts/jquery-3.1.1.min.js"></script> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <table border="1"> 
     <thead> 
      <th>Id</th> 
      <th>Name</th> 
      <th>Sales</th> 
      <th>Price</th> 
      <th>Sil</th> 
     </thead> 
     <tbody data-bind="foreach:friends"> 
      <tr> 
       <td data-bind="text:id"></td> 
       <td data-bind="text:name"></td> 
       <td data-bind="text:sales"></td> 
       <td data-bind="text:price"></td> 
       <td><input type="button" data-bind="click:$parent.removeUser" value="X" /></td> 
      </tr> 
     </tbody> 
    </table> 

    <div>Name</div> <input data-bind="value: Name" /> <br /> 
    <div>Sales </div> <input data-bind="value: Sales" /> <br /> 
    <div>Price </div> <input data-bind="value: Price" /> <br /> 

    <button data-bind="click:addUser">Ekle</button> 
    <button data-bind="click:removeUserAll">Hepsini Sil</button> 

    <script type="text/javascript"> 

     this.Name = ko.observable(); 
     this.Sales = ko.observable(); 
     this.Price = ko.observable(); 

     function functionViewModel() { 
      $(document).ready(function() { 
       $.ajax({ 
        type: "POST", 
        url: "KnockoutGrid2.aspx/GonderUrunler", 
        data: "{}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function (msg) { 
         alert(msg.d); 
         var initialData = msg.d; 
        } 
       }); 
      }); 
      var fn = { 
       friends: ko.observableArray(initialData) 
      }; 

      return fn; 
     }; 

     ko.applyBindings(functionViewModel()); 
    </script> 
</body> 
</html> 

マイバックエンドのコード:

[WebMethod] 
     public static string GonderUrunler() 
     { 
      denemeDBEntities db = new denemeDBEntities(); 
      var result = from d in db.urunler.ToList() 
         select d; 
      string output = new JavaScriptSerializer().Serialize(result); 
      return output; 
     } 

答えて

0

ajaxでコールバックを使用する必要があります.Ajaxは非同期 チェックThis文書を非同期に動作します。

$(document).ready(function() { 

     function functionViewModel(callback) { 
      $.ajax({ 
       type: "POST", 
       url: "KnockoutGrid2.aspx/GonderUrunler", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        callback({friends: ko.observableArray(msg.d)}); 
       } 
      }); 
    }; 

    functionViewModel(function(response){ 
     ko.applyBindings(response.friends) 
    }); 
}); 
0

あなたは「友人が実際に設定され、配列の場合知っていますか?あなたはあなたのforeachテンプレートでそれを使用します。それはあなたのJSコードで、あなたがあなたと働くことができるように、オブジェクトにそれをdeserialiseする必要があるので、あなたは、WebMethod属性からJSON形式の文字列を返している

<tbody data-bind="foreach:friends"> 
+0

このように書くとforeachは動作しますが、今回はデータベースのデータがありません。 var fn = { friends:ko.observableArray([{"id": "name": "よくできた子猫"、 "売上高": "352"、 "価格": "75.95"}、{ "id":2、 "name": "Speedy Coyote"、 "sales": "89"、 "price": "190.00" ....}]) }; –

0

...ノックアウトは、配列を読み込むことができない縫い目それに含まれるデータ。それを行うにはJSON.parse

success: function (msg) { 
    var data = JSON.parse(msg); 
    console.log(data[0].id); 
    console.log(data[0].name); 
} 

ここで注意するべきことがいくつかあります。まず、dataが配列になるので、そこに含まれるすべての情報を取得する必要がある場合は、ループを使用する必要があります。第二に、デバッグ時に常にconsole.logまたはconsole.dirを使用します。 alert()はデータ型を強制するので、全く信頼できません。