1

テキストエリアのあるフォームがあり、情報を送信しようとすると、JSON.stringify を使用していますが、エラーが発生します。コードは次のとおりです。

        $.ajax({
            type: "POST",
            dataType: "json",
            data: JSON.stringify({
                reportid: data["reportid"], //Guid
                assessmentId: data["assessmentId"], //Guid
                title: data["title"], //string
                body: data["body"], //string
                section: data["section"], //string
                reportsection: data["reportSection"] //string
            }),
            url: "/Assessments/ModifyAssessmentTemplateText",
            success: function (data) {
                lastModified = data["LastModified"];
                updateLastModified(lastModified);
                alert(data);
            }
        });

私のコントローラーメソッドは次のように設定されました:

[POST("ModifyAssessmentTemplateText")]
[AjaxOnly]
public JsonResult ModifyAssessmentTemplateText(Guid reportid, Guid assessmentid, string title, string body, string section, string reportSection)
{
//...
}

500 サーバー エラーが発生します。

テストを試みたとき、reportid という 1 つのパラメーターのみを指定し、メソッドに文字列を受け入れさせたところ、うまくいったことはわかっています。しかし、Guid に設定すると、500 エラーが発生します。JSON サーバー側を解析する方法はありますか?

編集:

注: データを使用せず、URL を使用する場合: "/Assessments/ModifyAssessmentTemplateText?reportid=" + reportid

問題なく動作します。

4

5 に答える 5

1

だから私はhttp://encosia.com/asmx-scriptservice-mistake-invalid-json-primitive/で答えを見つけることができました。基本的に、JSON 文字列を引用符で囲む必要がありました。これにより、文字列は JavaScript オブジェクト リテラルではなく JSON 文字列になりました。

サイトから引用:

The solution is as simple as two single-quotes:
// RIGHT
$.ajax({
  type: 'POST',
  contentType: 'application/json',
  dataType: 'json',
  url: 'WebService.asmx/Hello',
  data: '{ FirstName: "Dave", LastName: "Ward" }'
});

違いはわかりましたか?JavaScript オブジェクト リテラルの代わりに、data パラメーターは JSON 文字列になりました。違いは微妙ですが、理解するのに役立ちます。これは文字列であるため、jQuery はそれ以上の変換を実行しようとせず、JSON 文字列は ASMX ScriptService に渡されるときに妨げられません。

于 2013-05-07T20:32:56.120 に答える
1

これまでの答えは、要点が飛び交っていると思います。データは文字列である必要はまったくありません。これを試しましたか?

$.ajax({
    type: "POST",
    dataType: "json",
    data: {
        reportid: data["reportid"], //Guid
        assessmentId: data["assessmentId"], //Guid
        title: data["title"], //string
        body: data["body"], //string
        section: data["section"], //string
        reportsection: data["reportSection"] //string
    },
    url: "/Assessments/ModifyAssessmentTemplateText",
    success: function (data) {
        lastModified = data["LastModified"];
        updateLastModified(lastModified);
        alert(data);
    }
});
于 2013-05-17T16:44:59.823 に答える
0

GUID を文字列として投稿し、サーバー上で GUID を解析してみましたか?

于 2013-05-07T20:10:45.710 に答える