クロスドメイン コールを含む Web プロジェクトに取り組んでおり、Knockout.js と ASP.NET Web Api を使用することにしました。VS 2012 でシングル ページ アプリケーション テンプレートを使用し、Knockout クラスをそのまま実装しました。同じドメインから JSON 呼び出しを行うとページはうまく機能しますが、リモート サーバーから JSONP を使用しようとすると、ノックアウトがデータをバインドしていないようです。JSONP 呼び出し中にリモートから受信した JSON データを確認できますが、ノックアウトはデータをバインドできません。
ここに私の JavaScript ViewModel クラスがあります:
window.storyApp.storyListViewModel = (function (ko, datacontext) {
//Data
var self = this;
self.storyLists = ko.observableArray();
self.selectedStory = ko.observable();
self.error = ko.observable();
//Operations
//Load initial state from the server, convert it to Story instances, then populate self
datacontext.getStoryLists(storyLists, error); // load update stories
self.selectStory = function (s) {
selectedStory(s); $("#showStoryItem").click(); window.scrollTo(0, 0);
storyItem = s;
}
//append id to the hash for navigating to anchor tag
self.backToStory = function () {
window.location.hash = storyItem.id;
}
self.loadStories = function () {
datacontext.getStoryLists(storyLists, error); // load update stories
}
return {
storyLists: self.storyLists,
error: self.error,
selectStory: self.selectStory
};
})(ko, storyApp.datacontext);
// Initiate the Knockout bindings
ko.applyBindings(window.storyApp.storyListViewModel);
そして、以下のような私の DataContext クラス:
window.storyApp = window.storyApp || {};
window.storyApp.datacontext = (function (ko) {
var datacontext = {
getStoryLists: getStoryLists
};
return datacontext;
function getStoryLists(storyListsObservable, errorObservable) {
return ajaxRequest("get", storyListUrl())
.done(getSucceeded)
.fail(getFailed);
function getSucceeded(data) {
var mappedStoryLists = $.map(data, function (list) { return new createStoryList(list); });
storyListsObservable(mappedStoryLists);
}
function getFailed() {
errorObservable("Error retrieving stories lists.");
}
function createStoryList(data) {
return new datacontext.StoryList(data); // TodoList is injected by model.js
}
}
// Private
function clearErrorMessage(entity) {
entity.ErrorMessage(null);
}
function ajaxRequest(type, url, data) { // Ajax helper
var options = {
dataType: "JSONP",
contentType: "application/json",
cache: false,
type: type,
data: ko.toJSON(data)
};
return $.ajax(url, options);
}
// routes
function storyListUrl(id) {
return "http://secure.regis.edu/insite_webapi/api/story/" + (id || "");
}
})(ko);
このページ: http://insite.regis.edu/insite/index.htmlは、secure.regis.edu へのクロスドメイン呼び出しを行いますが、機能していません。ただし、secure.regis.eduinsite/index.html の同じページで JSON 呼び出しを行うと問題なく動作します。
私は何を間違っていますか?どんな助けでも大歓迎です。