2

私は十分に単純なWebサービスを持っています:

        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        [WebMethod]
        public string GetToken(string a)
        {
        }

そして、私はそれをJQueryを使用してクライアントサイドと呼んでいます:

    $.ajax({
        post: 'GET',
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        url: '../url/GetToken',
        data: "{'a':'test'}",
        success: function (data) {
        },
        error: function (a, b, c) {
        }
    });

呼び出しは常に失敗し、返されるエラーは500 InternalServerErrorです。Webサービス内にブレークポイントを設定しましたが、コードにまったく到達していません。引数をまったく受け取らないように(そしてdataJQuery呼び出しから要素を削除するように)Webサービスを変更すると、呼び出しは成功します。data私は要素を渡すためにさまざまな方法で遊んできました。JSONオブジェクト(引用符なし)を渡し、a引数の前後から引用符を削除しました。どれも機能しません。

編集:

Fiddlerを使用して、500の原因となる実際のエラーは「無効なWebサービス呼び出し、パラメーターの値がありません」であると判断しました。

編集2:

この方法でデータを渡すと、次のように機能します。

data: "a='test'"

理由はわかりません。何か案は?

4

3 に答える 3

3

これはテストしていませんが、コードスニペットにはではpost: 'GET'なくがありtype: 'GET'ます。これにより、サーバーがcontentTypeをjsonとして拒否する可能性があります(これが、データが適切にシリアル化されていない理由です)。

于 2013-02-11T21:22:19.580 に答える
2

Fidlerのようなツールを使用して、返される応答を確認できます。エラーページが返される可能性がありますが、これはjquery ajax呼び出しであるため、表示されません。

于 2013-02-11T21:05:15.993 に答える
2

GETを使用できず、タイプとしてPOSTを使用する必要があり、Webサービスは同じディレクトリにありますが、これは機能しました。

    $.ajax({
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        url: 'url.asmx/GetToken',
        data: "{'a':'test'}",
        success: function(data) {
            alert("Success");
        },
        error: function(a) {
            alert(a.responseText);
        }
    });
于 2013-02-11T21:34:17.453 に答える