2012-07-31 48 views
1

我是整個前端客戶端腳本編寫場景的新手,在處理最近的項目時遇到了一些困難。我瀏覽過網站,找不到任何回答我的問題的東西。這裏可能有些東西,我沒有找到它,因爲我缺乏經驗,如果能提供這些資源的鏈接,它會很好。當使用KnockoutJS時,頁面加載時不會產生Ajax請求

我目前正在建立一個客戶端,使ajax調用我建立的跨域asp.net web api。我知道web api的工作原理是它已經在小提琴手中測試過了。我也成功地通過點擊事件進行了調用。

問題是,我似乎無法得到這個工作在頁面加載和knockoutjs。我試圖做一個簡單的列表,當頁面加載時填充數據,但是當我加載頁面並檢查fiddler時,我可以看到ajax調用沒有被創建。這可能解釋了爲什麼當我加載頁面的內容不存在。我試圖插入一些靜態數據來查看模型和綁定工作,所以它似乎可能是這樣的情況,有阻塞的Ajax調用。

我看過例子,並敲了一些代碼。我看不出任何代碼問題,但由於我缺乏經驗,我肯定有可能錯過某些東西。也許還有更有效的模型綁定方法,如果是的話,我會很感激任何有經驗的人的建議。

的代碼是:

@{ 
ViewBag.Title = "KnockoutTesting"; 
} 


<!-- MAIN --> 
    <div id="main"> 
     <!-- wrapper-main --> 
     <div class="wrapper"> 
      <ul data-bind="foreach: places"> 
       <li> 
        <span data-bind="text: title"></span> 
       </li> 
      </ul> 
     </div> 
    </div> 

@section scripts { 
<script type="text/javascript" src="../../Scripts/jquery-1.7.2.js"></script> 
<script type="text/javascript" src="../../Scripts/knockout-2.1.0.js"></script> 

<script type="text/javascript"> 

    function PlacesViewModel() { 
     var self = this; 

     function Place(root, id, title, description, url, pub) { 
      var self = this; 

      self.id = id; 
      self.title = ko.observable(title); 
      self.description = ko.observable(description); 
      self.url = ko.observable(url); 
      self.pub = ko.observable(pub); 

      self.remove = function() { 
       root.sendDelete(self); 
      }; 

      self.update = function (title, description, url, pub) { 
       self.title(title); 
       self.description(description); 
       self.url(url); 
       self.pub(pub); 
      }; 

     }; 

     self.places = ko.observableArray(); 

     self.add = function (id, title, description, url, pub) { 
      self.places.push(new Place(self, id, title, description, url, pub)); 
     }; 

     self.remove = function (id) { 
      self.places.remove(function (place) { return place.id === id; }); 
     }; 

     self.update = function (id, title, description, url, pub) { 
      var oldItem = ko.utils.arrayFirst(self.places(), function (i) { return i.id === id; }); 
      if (oldItem) { 
       oldItem.update(title, description, url, pub); 
      } 
     }; 



     self.sendDelete = function (place) { 
      $.ajax({ 
       url: "http://localhost:1357/api/places" + place.id, 
       type: "DELETE" 
      }); 
     } 
    }; 

    $(function() { 
     var viewModel = new PlacesViewModel(); 

     ko.applyBindings(viewModel); 
     $JQuery.support.cors = true; 
     $.get("http://localhost:1357/api/places", function (places) { 
      $.each(places, function (idx, place) { 
       viewModel.add(place.PlaceID, place.Title, place.Description, place.URL, place.Public); 
      }); 
     }, "json"); 
    }); 

</script> 
} 

已簡化爲得到它之前,我增加更多的功能,工作的緣故。

謝謝你的時間。

回答

0

我相信你的問題可能在於你的Web API實現。客戶端和服務器都必須支持CORS。根據Carlos'post,Web API本身不支持CORS。他的文章包含一個代碼示例。

相關問題