我使用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