6

1 つのメソッドを含む Web サービスがあります。

[WebMethod]
public string Movies()
{
    using (var dataContext = new MovieCollectionDataContext())
    {
        var query = dataContext.Movies.Select(m =>new{m.Title,m.ReleaseDate}).Take(20);
        var serializer = new JavaScriptSerializer();
        return serializer.Serialize(query);
    }
}

このメソッドはオブジェクトを適切にシリアル化しますが、FireBug で応答を表示すると、次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">[{"Title":"SQL","ReleaseDate":"\/Date(1224007200000)\/"},{"Title":"Termonator Salvation","ReleaseDate":"\/Date(1224007200000)\/"}]</string>

Kendo Data Source を使用する jQuery メソッドを次に示します。

$(function () {
    alert("Welcome To Kendo");
    var dataSource = new kendo.data.DataSource(
                {
                    transport: {
                        read: {
                            type: "POST",
                            dataType: "json",
                            url: "/MovieService.asmx/Movies"
                           // contentType: "application/json; charset=utf-8"

                        }
                    },
                    change: function (e) {
                        alert(e);

                    },
                    error: function (e) {
                        alert(e[2]);
                    },
                    pageSize: 10,
                    schema: {
                        data: "d"

                    }


                });

    $("#MovieGridView").kendoGrid({
        dataSource: dataSource,
        height: 250,
        scrollable: true,
        sortable: true,
        pageable: true,
        columns: [
            { field: "Title", title: "Movie Name" },
            { field: "ReleaseDate", title: "Movie Release" }
            ],
        editable: "popup",
        toolbar: ["create"]
    });
});

上記のコードは、私がjQueryで何をしているかを示しており、エラーイベントが呼び出されたときにこのエラーが発生しました

SyntaxError: JSON.parse: unexpected character

上記のデータを jQuery で使用できるように JSON に変換するにはどうすればよいですか? そして、どこが間違っているのですか?

4

1 に答える 1

8

ResponseFormatメソッドのを指定する必要があります。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetMovies() {
}

注:POST同様の問題でこの質問にたどり着いた他の人のために、リクエストではなくリクエストを使用する必要があることに注意することも重要ですGET。参照: JSON ハイジャックと ASP.NET AJAX 1.0 がこれらの攻撃を回避する方法


編集

投稿したjQueryに基づいて、正しいメソッドを呼び出していません。C# は というメソッドを定義してGetMoviesいますが、jQuery は「Movies」というメソッドを呼び出そうとしています。

これ:

url: "/MovieService.asmx/Movies"

これに変更する必要があります:

url: "/MovieService.asmx/GetMovies"
于 2012-03-28T20:04:49.930 に答える