0

これは私を困惑させました-私は問題が何であるかわかりません!

この呼び出しは常に500エラーを返します。

クエリ:

$('body').on('click', '.day', function () {
    // a suspect day has been clicked
    if (confirm('Re-index documents received on this day?')) {
        // re-index
        var day = $(this).find('.day_number').text();
        var year = parseInt($('#hidYear').val());
        var month = parseInt($('#hidMonth').val());
        $.ajax({
            type: "POST",
            url: "ajax.asmx/ReIndexDay",
            data: JSON.stringify( { Month: month, Year: year, Day: day } ),
            contentType: "application/xml; charset=utf-8",
            dataType: "xml",
            success: function (data) {
                var calendarHTML = $(data).find(':first').text();
                // update hidden fields and calendar
                $('#hidYear').val(year);
                $('#hidMonth').val(month);
                $('#divContent').html(calendarHTML);
            },
            error: function (msg) {
                alert("Failed: " + msg.status + ": " + msg.statusText);
            }
        });
    }
});

C#

[WebMethod(Description = "Re-index the day and return HTML of a calendar table for the month")]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public string ReIndexDay(int Day, int Month, int Year)
{
    Diagnostic.ReIndex(Day, Month, Year);
    return GetIndexCalendarHTML(Month, Year);
}

私は今立ち往生しているので、すべての提案に感謝します!

[編集]

私はこれをブラウザから取得しました-同じものを再現していない可能性があるため、正確かどうかはわかりません:

System.InvalidOperationException:リクエスト形式が無効です:application / xml; charset=UTF-8。System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()でSystem.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()で

[/編集]

4

2 に答える 2

1

送信するJSONですが、コンテンツタイプがXMLに設定されています。これに変更してみてください。

 contentType: 'application/json; charset=utf-8',
于 2012-04-25T15:29:31.907 に答える
1

コンテンツタイプを次のように設定することに加えて:

contentType: 'application/json; charset=utf-8',

あなたが持っていたようなXMLの代わりに(@Zacharyが言ったように(そして私はコメントで言ったように:))。また、実際にXMLを返送する必要があります。

ことわざ:

[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]

文字列を実際にXMLとしてエンコードするのではなく、Content-typeヘッダーを次のように設定するだけです。

Content-Type: text/xml; charset=utf-8. 

実際にはXMLを返す必要があります少し誤解を招きます。

編集:実際には、それを修正させてください。文字列を送信する場合を除いて、XMLを実行します。これを行うことで、文字列をXMLでラップさせることができます。

[ScriptMethod(ResponseFormat = ResponseFormat.Xml、XmlSerializeString = true)]

于 2012-04-25T15:41:12.140 に答える