3

次のコードを使用して、サービスへの AJAX 呼び出しを正常に行うことができます。

var serverData = { "ZoneParent": "123" };

        var request = $.ajax({
            type: "POST",
            url: "/./Services/Reports.svc/getZones",
            contentType: "application/json",
            dataType: "json",
            jsonp: null,
            jsonpCallback: null,
            data: JSON.stringify(serverData)
        });


        request.done(function (msg) {
            alert(JSON.stringify(msg));
        });

        request.fail(function (jqXHR, textStatus) {
            alert("Request failed: " + textStatus);
        });

ただし、剣道グリッドで同じ呼び出しを実装しようとすると、エラーが発生します

受信メッセージのメッセージ形式が「未加工」です。この操作で想定されるメッセージ形式は、'Xml'、'Json' です。

getZones の場合。私のサービス コールは DataTables で正常に動作しますが、潜在的に Kendo に切り替えたいと考えています。私はこれを何日も台無しにしてしまいました。アプリケーションは MVC ではありません。これが私の剣道コードスニペットです:

var dataSource = new kendo.data.DataSource({

        transport: {

            read: {

                url: "/./Services/Reports.svc/getZones",

                dataType: "JSON",

                data: { zoneParent: "123" },

                    type: "POST"
            },

            parameterMap: function (data, operation) {
                    return kendo.stringify(data);
                }
        },

            schema: {

                data: "d"
            }
    });

    var grid = $("#allGrids").kendoGrid({

        dataSource: dataSource,

        height: 200
    });
4

3 に答える 3

5

cfedukeが同様の提案を行ったので、$.ajax 呼び出しで行ったのと同じように、トランスポート読み取り構成の読み取りオブジェクトに contentType を追加することができます

例えば

var dataSource = new kendo.data.DataSource({

    transport: {

        read: {

            url: "/./Services/Reports.svc/getZones",

            dataType: "json",

            contentType: "application/json",

            data: { zoneParent: "123" },

                type: "POST"
        },

        parameterMap: function (data, operation) {
                return kendo.stringify(data);
            }
    },
于 2013-01-01T12:35:23.930 に答える
2

サーバーの応答「Content-type」ヘッダーが、予期された「application/json」以外のものであるように思われます。

cURLを使用できます:

curl -v -H "Content-type:application/json" -H "Accept:application/json" \
http://localhost/Services/Reports.svc/getZones 

エンドポイントを呼び出して、返されたヘッダー値を確認します(-vは冗長であり、それがないとヘッダーは表示されません)。

「Accept:application / json」ヘッダーを設定するだけで問題が明らかになる場合があります。サーバーが出力をJSONに強制するか、追跡可能なエラーをスローします。

于 2012-12-31T21:23:56.407 に答える
0

他に方法がないか調査中です。しかし、剣道には多くの限界があるようで、これもその一つです。Datables にはヘッダーは必要なく、JSON 形式だけが必要です。

これは、データを送信しているコントローラーに追加する必要があるものです (その ajax 呼び出しの場合)

header("コンテンツタイプ: アプリケーション/json");

こんな風にならなければいいのですが、剣道はこれを強制していると思います。私はデータテーブルを好みます。自由度が高く、カスタマイズも自由です。

于 2014-04-09T16:35:05.510 に答える