1

私は、jquery データテーブルといくつかのチャート要素がある asp mvc に取り組んでおり、ajax 呼び出しですべての項目をフェッチしています。

ajax (datatable json data and image for chart) 呼び出しで例外が発生した場合は、ユーザーをリダイレクトする必要があります。現在、例外が発生したときに生成する必要なhtmlを提供するデータテーブルのエラーコールバックを使用していますが、同時にデータテーブルとともに、出力がデータテーブルの結果に依存するコントローラーにさらに7つのjquery呼び出しを送信しているため、これらの7つの呼び出しトラップ無限ループで。データテーブルの関数でエラーが発生した場合、サーバー側でこの処理を停止するにはどうすればよいですか。

前もって感謝します。

4

3 に答える 3

4

jQuery Ajaxのエラーイベントを処理し、その関数でやりたいことを何でもします。

$.ajax(
      {
          success: function (result) {

              });
          },
          error: function (x, e) {
           //Write you code here
              alert(x.readyState + " " + x.status + " " + e.msg);
          }
      });
于 2012-06-12T14:19:20.207 に答える
1

MVC3プロジェクトでaspxページを使用して次のように実行しました。

<customErrors mode="RemoteOnly" defaultRedirect="Error.aspx">
</customErrors>

お役に立てれば

于 2012-06-12T13:56:18.440 に答える
1

AJAX エラー処理では、常にサーバー側とクライアント側の両方に注意する必要があります。それぞれの側で何が起こるかを決める必要があります。

Kapil Khandelwal答えは素晴らしいですが、クライアント側のみをカバーしています。

この Q/A もお読みになることをお勧めします: ASP.NET MVC Ajax エラー処理

一般的または特定のエラー ハンドラーを定義し、JsonResult またはあらゆる種類の AJAX 呼び出しへの応答を返すメソッドを装飾することは常に役に立ちます。何かのようなもの:

public class JsonErrorHandler : ActionFilterAttribute 
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest() && filterContext.Exception != null)
        {
            // Log the Error
            // Do necessary things...

            filterContext.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;

            filterContext.Result = new JsonResult()
            {
                //JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                Data = new
                {
                    filterContext.Exception.Message,
                    filterContext.Exception.StackTrace
                }
            };

            filterContext.ExceptionHandled = true;
        }
    }
}

次に、次のように使用します。

[JsonErrorHandler]
public JsonResult GetMyData(...)
{
    .
    .
    .
}
于 2012-06-20T21:40:26.713 に答える