0

データを取得するためにJSONを返す安らかなサービスへのjQuery ajax呼び出しと組み合わせて、knockout.jsを使用してデータをバインドしています。これについてさまざまなことを試しましたが、呼び出しの構文が正しくないようです。コールバックを起動すると、データは null です。フィドラーでは、JSON データが送信され、データは jsonlint.com で正常に検証されます。errorThrown には「parseAcademicSessions が呼び出されませんでした」が含まれていますが、エラー ハンドラーで parseerror と共に 200 ステータスを取得します。

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 関数は、success 関数のコードと同じです。ここのスタックオーバーフローでの他の回答に基づいて、これについてさまざまな調整を試みました。どれも機能していないようです。

ありがとう、マイク

4

1 に答える 1

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