gpt4 book ai didi

asp.net - 使用 Knockout.js 绑定(bind) JSONP 数据

转载 作者:行者123 更新时间:2023-12-04 05:13:20 26 4
gpt4 key购买 nike

我正在开发一个涉及跨域调用的 Web 项目,我决定使用 Knockout.js 和 ASP.NET Web Api。我在 VS 2012 中使用了单页应用程序模板,并按原样实现了 Knockout 类。当我从同一个域进行 JSON 调用时,该页面效果很好,但是当我尝试从远程服务器使用 JSONP 时, knockout 似乎没有绑定(bind)数据。在进行 JSONP 调用时,我可以看到从远程接收到的 JSON 数据,但是 knockout 无法绑定(bind)数据。

这是我的 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 调用的同一页面工作得很好。

我究竟做错了什么?任何帮助将不胜感激。

最佳答案

感谢那些提供的帮助。

我设法通过将 WebApiContrib.Formatting.Jsonp 类添加到我的 WebApi 项目来解决该问题,如 https://github.com/WebApiContrib/WebApiContrib.Formatting.Jsonp 中所述。 ,并对我的 jQuery Ajax 助手类进行轻微修改,如下所示:

function ajaxRequest(type, url, data, callbackWrapper) { // Ajax helper
var options = {
dataType: "jsonp",
crossDomain : true,
type: type,
jsonp: "callback",
jsonpCallback: callbackWrapper,
data: ko.toJSON(data)
};

return $.ajax(url, options);
}

一切都像魅力一样。

关于asp.net - 使用 Knockout.js 绑定(bind) JSONP 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com