0

javascript $.Ajax 呼び出しを使用して Web サービスから JSON を取得しようとしています。

<script type="text/javascript">
    $(function () {
        $("#" + "@Model.BidObjectId").submit(function () {
            alert("Test");
            var param = { 'id': "@Model.BidObjectId" };
            $.ajax({
                url: "http://localhost:11523/Service1.svc/GetBidObject",
                dataType: "jsonp",
                contentType: "application/json;charset=utf-8",
                type: "GET",
                data: JSON.stringify(param),
                success: function (msg) {
                    alert("success");
                    if (msg != null) {
                        return msg.URL;
                    }
                },
                error: function (msg2) {
                    alert(msg2);
                }
            });
            return false;
        });
    });
</script>

私は常にパーサーエラーでエラーシナリオに入ります

status: 200 statusCode: function ( map ) { statusText: "parsererror"

ここで説明を読みましたが、これにより OPTION 呼び出しが作成されるため、JSON を使用できません。POST を GET に変更して、いくつかの異なる方法 (クラスの作成など) でデータを返すことを試みましたが、問題が何であるかを理解できないようです。JSONP を使用したソリューションのみが、正しい GET または POST を実行することに同意しているようです。他のソリューションは私のWebサービスさえ見つけられません。

これが私のWebサービスのコードです:

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "/GetBidObject?id={id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        string[] GetBidObject(string id);

        public string[] GetBidObject(string id)
        {
            BidObject bidobject = new BidObject() { BidObjectId = 1, Title = "callback" };

            JavaScriptSerializer ser = new JavaScriptSerializer();
            string result =  ser.Serialize(bidobject);
            List<string> listResult = new List<string>();
            listResult.Add(result);
            return listResult.ToArray(); 
        }

私は ASP.NET ではなく、Razor を使用しています。

[編集]

Fiddler で jsonp を json ごとに変更すると、呼び出しがOPTIONS http://localhost:11523/Service1.svc/GetBidObject?{%22id%22:%220%22} HTTP/1.1クロムであることがわかります。IE Fiddler では何も検出されません。ajax呼び出しは決して行われません...私は本当に理解していません。

4

1 に答える 1

0

JSON とクエリ文字列は 2 つの異なるものです。GET (または POST) 経由でデータを送信する場合、JSON を使用する必要はありません。

$.ajax({
    url: "http://localhost:11523/Service1.svc/GetBidObject",
    dataType: "jsonp",
    type: "GET",
    data: param,
    success: function (msg) {
        alert("success");
        if (msg != null) {
            return msg.URL;
        }
    },
    error: function (msg2) {
        alert(msg2);
    }
});

jQuery は正しくシリアルparam化して URL を生成します。

http://localhost:11523/Service1.svc/GetBidObject?id=123&callback=jquery1234

id次に、バックエンドでクエリ文字列から値を読み取るだけです。

于 2012-06-26T16:30:54.253 に答える