0

我正在使用 knockout.js 结合 jQuery ajax 调用将数据绑定到返回 JSON 以获取数据的 restful 服务。我对此进行了各种尝试,但似乎无法正确理解调用的语法。当我触发回调时,数据为空。在 fiddler 中,JSON 数据通过并且数据在 jsonlint.com 上验证就好了。我在错误处理程序中获得 200 状态以及 parseerror,而 errorThrown 包含“未调用 parseAcademicSessions”。

这是我进行 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 函数与成功函数中的代码相同。我在堆栈溢出时根据此处的其他答案尝试了各种调整。似乎没有一个工作。

谢谢,迈克

4

1 回答 1

0

鉴于文档对jsonp的说法,不确定为什么这有效,但是当我选择该jsonp选项时,以下方法有效。It doesn't when the option is there:

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)});
于 2013-03-20T18:02:06.833 回答