2

私は Ajax と ASP.NET MVC を初めて使用します。AJAX に戻る関数があり、エラー状況を処理する必要があります。すべてが正常に機能する場合、コードは問題ありません。私の質問は、エラー部分をどのように処理するかです。ここに私が持っているものがあります:

成功を返すために私は持っています:

var data = new { success = false };

return Json(data, JsonRequestBehavior.AllowGet);

そして、例外やエラーが発生したときに何を返すかを知る必要がありますか??

これは私のクエリです:

function DoMailPDF() {
             $("#submitMail").attr("disabled", true);
             var personid = $("#personid").val();
             var unitid = $("#unitid").val();
             var url = "@(Url.Action("SendEmail", "Report"))";
            $.ajax({
                url: url,
                data: { person: personid , unit:unitid},
                success: function () {                    
               // $('input[name=MailSent]').attr('checked', true);
                $("#submitMail").removeAttr("disabled");
                    alert("Email sent!");
                },
                error: function () {                    
                 alert("Email not sent!");
                }
            });
        }

エラー関数には決してなりません。エラーになるようにするにはどうすればよいですか?ヒントや提案は大歓迎です。

4

2 に答える 2

5

次のように記述して、json 応答オブジェクトにアクセスできます。

       $.ajax({
            url: url,
            data: { person: personid , unit:unitid},
            dataType: 'json',
            success: function (response) {                    
                if (response.success == false) {
                    // Error handling
                } else {
                    // Success handling
                }
            },
            error: function () {                    
             alert("Email not sent!");
            }
        });
于 2012-06-13T13:50:53.993 に答える
2

Nick Bork がコメントで既に説明したように、応答のエラー/成功ステータスは、ヘッダーで送信される Http ステータス コードによって決まります。提案された方法で応答オブジェクトと成功プロパティを調べることはできますが、より強力で長い実績のあるメカニズム (HTTP プロトコル自体) が既にある場合は、明らかに適切な方法ではありません。

.NET は、すべてがコードに従っている場合に HTTP 200 (OK) を使用しますが、コントローラーでこの動作を変更するには、次のように Reponse オブジェクトにアクセスします。

Response.StatusCode = 500; // or any of the other HTTP "failure" status codes

4xx または 5xx カテゴリのステータス コードはerror()、呼び出しで指定されたハンドラーをトリガーし$.ajax(...)ます。もちろん、そこから、適切なステータス コード、応答の詳細、および XHR オブジェクトのすべてのプロパティを調べて、より意味のあるユーザー エクスペリエンスを提供することもできます。

HTTPステータスコードはほとんど固定されており、変更される可能性は低いため、カスタムメイドのソリューションよりも間違いなく好ましいと思います...

PS: HTTP ステータス コードのリストについては、ウィキペディアがお勧めです。

于 2012-06-13T13:50:39.330 に答える