5

jqueryを使用してajax呼び出しを行い、json形式でデータを取得しています。成功のコールバック関数が呼び出されますが、データは空です。

$(document).ready(function () {
    $.ajax({
        url: "http://apps.sungardhe.com/StudentResearch/public/Research.svc/Schools",
        type: "GET",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: cbSchools
    });
});

function cbSchools(data) {
    if (data == null) {
        alert("data is null");
        return;
    }
    for (var school in data) {
        $("#ddSchool").append("<option value='" + data[school].ShortName + "'>" + data[school].ShortName + "</option>");
    }
}

フィドラーを使用すると、応答が実際にはjsonデータを返していることがわかりますが、何らかの理由でjquery結果オブジェクトがnullです。誰でも理由を教えてもらえますか?

4

3 に答える 3

8

クロスドメイン XMLHttpRequests を防止する同一オリジン ポリシーによってブロックされています。このような .Net Web サービスから JSON を取得するにはヘッダーを設定する必要があるため、難しい状況にあります。別のドメインからではなく、ブラウザーからそのような要求を行うことはできません。

Fiddler はコンテンツを表示している可能性がありますが、ブラウザーはページにコンテンツを表示させません。セキュリティ上の理由から、常に null になります。これを回避する 1 つの方法はJSONPですが、残念ながら、そのサービスがそれをサポートするように設定されているようには見えません。

于 2010-07-27T20:06:42.867 に答える
1

私はあなたがあなたの呼び出しを一般的にすることができると信じています(mardukが示す理由)

これを処理し、呼び出しを汎用的にする (data および data.d で動作する) ために、古いサービスだけでなく新しいサービスでも動作するように、(asp.net のものを使用して) ajax 呼び出しで次を使用します。

   dataFilter: function(data)
    {
        var msg;
        if (typeof (JSON) !== 'undefined' &&
        typeof (JSON.parse) === 'function')
            msg = JSON.parse(data);
        else
            msg = eval('(' + data + ')');
        if (msg.hasOwnProperty('d'))
            return msg.d;
        else
            return msg;
    },

編集:本当に null であり、「未定義」ではない場合、クロスドメインの問題がここで発生している可能性があります。

于 2010-07-27T20:15:03.267 に答える
0

これを試して

if (data.d == null) {
    alert("data.d is null");
    return;
}

返されるデータ型は json であるため、データは応答オブジェクトのデータ変数 "d" にあります。

于 2010-07-27T20:04:06.857 に答える