我使用knockout.js将数据与jQuery ajax调用绑定到一个返回JSON以获取数据的restful服务。我在这方面尝试了各种各样的东西,而且似乎无法获得呼叫权限的语法。当我得到回调触发时,数据为空。在提琴手中,JSON数据通过并且jsonlint.com上的数据验证很好。我在错误处理程序中遇到了一个200状态以及一个parseerror,而errorThrown包含'parseAcademicSessions未被调用'。jquery ajax回调获取null数据
这里是我的了AJAX调用时淘汰赛视图模型代码:
function HomeViewModel() {
var self = this;
self.AcademicSessions = ko.observableArray([]);
self.hello = 'Hi ...';
$.ajax({
url: 'http://localhost:51044/Rest/GetAcademicSessions',
dataType: 'jsonp',
type: 'GET',
jsonp: false,
jsonpCallback: 'parseAcademicSessions',
crossDomain: true,
success: function (data) {
$('#academicSessionsDiv').css('color', 'black');
for (var ii = 0; data && ii < data.length; ii++) {
if (data[ii].Year < 2012 || data[ii].Year > 2013) continue;
var beginDate = new Date(data[ii].BeginDate.match(/\d+/)[0] * 1);
var session = new AcademicSession(beginDate.toString("ddd MMM dd, yyyy"), data[ii].CatalogCode,
data[ii].CatalogDescription, data[ii].CatalogYear, data[ii].Description,
data[ii].SessionCode, data[ii].Year);
self.AcademicSessions.push(session);
}
},
error: function (jqXhr, status, errorThrown) {
$('#academicSessionsDiv').css('color', 'red');
$('#academicSessionsDiv').html("<table class='session-table'><tr><td>Status</td><td>"
+ status + "</td></tr><tr><td>JQXHR.Status</td><td>"
+ jqXhr.status + "</td></tr><tr><td>Error Thrown</td><td>"
+ errorThrown + "</td></tr></table>");
}
});
};
parseAcademicSessions函数与成功函数中的代码完全相同。我根据堆栈溢出的其他答案尝试过对此进行各种调整。没有任何工作。
谢谢, 迈克
所以'console.log'在成功和parseAcademicSessions函数的顶部会记录空?如果你删除了成功选项,只留下jsonpCallback选项会发生什么? – 2013-03-19 23:47:09
如果我得到它回拨,数据为空。我试过忽略成功选项,只使用回调。 parseAcademicSessions函数在任何范围之外定义,所以它是全局的,就像jQuery.ajax所要求的那样。我也尝试过类似“window.myCallback = function parseAcademicSessions(data){...”和“jsonpCallback:'myCallback'”,它无法像在示例中的语法那样调用回调。我也试过没有带回调的字符串名称的jsonp选项,并将jsonpCallback定义为函数而不是带有jsonp:false的字符串。没爱。 – 2013-03-20 13:27:21
服务器端如何,当你发送数据之前记录你的数据会发生什么? – 2013-03-20 15:42:14