2013-03-19 51 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