2013-03-19 75 views
0

我使用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函數與成功函數中的代碼完全相同。我根據堆棧溢出的其他答案嘗試過對此進行各種調整。沒有任何工作。

謝謝, 邁克

+0

所以'console.log'在成功和parseAcademicSessions函數的頂部會記錄空?如果你刪除了成功選項,只留下jsonpCallback選項會發生什麼? – 2013-03-19 23:47:09

+0

如果我得到它回撥,數據爲空。我試過忽略成功選​​項,只使用回調。 parseAcademicSessions函數在任何範圍之外定義,所以它是全局的,就像jQuery.ajax所要求的那樣。我也嘗試過類似「window.myCallback = function parseAcademicSessions(data){...」和「jsonpCallback:'myCallback'」,它無法像在示例中的語法那樣調用回調。我也試過沒有帶回調的字符串名稱的jsonp選項,並將jsonpCallback定義爲函數而不是帶有jsonp:false的字符串。沒愛。 – 2013-03-20 13:27:21

+0

服務器端如何,當你發送數據之前記錄你的數據會發生什麼? – 2013-03-20 15:42:14

回答

0

不知道爲什麼這個工程給予什麼文檔說約jsonp,但是當我拿出jsonp選項,以下的作品。它不會當有選項時:

var URL = "http://www.geonames.org/postalCodeLookupJSON" + 
"?postalcode=10504&country=US"; 
function alertResponse(data, status) { 
    console.log(data); return JSON.stringify(data); 
} 
$.ajax({ 
    url: URL, crossDomain:true, 
    dataType: 'jsonp', 
    jsonpCallback: 'alertResponse', 
}).done(function(data){console.log(data)}); 
+0

[更多這裏](http://stackoverflow.com/questions/2414899/why-isnt-jquery-automatically-appending-the-jsonp-callback)。 – 2013-03-20 18:02:44