2017-09-19 11 views
0

私はJSONの投稿にJqueryを使用しています。JSONを返すことでajaxエラーに遭遇する方法

私の問題は、MVCコントローラから応答して「失敗」する方法がわかりません。

私は私のアヤックスは、(コードスニペット変数がすでに定義されている)精通している必要がありweb.api

を使用していないよ、MVC.NETを使用しています:

$.ajax({ 
      type: type, 
      url: url, 
      contentType: "application/json;", 
      data: data, 
      dataType: "json", 
      success: function (response) { 
       successDelegate(response); 
      }, 
      failure: function (e) { 
       failDelegate(e.statusText); 
      }, 
      error: function (e) { 
       errorDelegate(e.statusText); 
      } 

私が持っている問題私がそれを返すたびに成功に当たります。

だから私のMVCコントローラは、私はそれが成功を打っている理由...私が望む通りに戻っていますし、私は単にIsErrorを検証することができますが、それを返すために良いだろう参照

[HttpPost] 
public JsonResult Create() 
{ 
    //logic removed 
    return Json(new { IsError = true, Message = "The captcha code is not vaid" }); 
} 

可能性がありそれが成功か失敗かをAJAXが知るところです。

私はSend JSON data via POST (ajax) and receive json response from Controller (MVC)を読んでいますが、これは応答のタイプ(応答を失敗、成功ではないようにする方法)ではなく、応答(私が働いている)を受信したことです。

+0

[POST(ajax)経由でJSONデータを送信し、コントローラ(MVC)からjson応答を受信]の可能な複製(https://stackoverflow.com/questions/8517071/send-json-data-via-post-ajax- and-receive-json-response-from-controller-mvc) –

+0

@FarhadBagherloなぜこれは詐欺ですか?私は応答を得る方法を知っています。それは常に成功を収める私の後期段階。私の質問は、ヒットが失敗するように正しいタイプの応答を得る方法です。 – MyDaftQuestions

+0

[エラーステータスコードMVCのJSONを返す]の可能な複製(https://stackoverflow.com/questions/11370251/return-json-with-error-status-code-mvc) – Kolichikov

答えて

1

あなたは間違った経路にいると思います。

これが成功した要求のハンドルですので、あなたは常に

success: function() {} 

のコードブロックに実行します。あなたのJSONレスポンス内にあなたの "IsError"のようなfalse-flagを持っていても、あなたのHTTPレスポンスは失敗しません。

成功関数内のjsonを解析し、if-elseを使用してIsErrorを探し、UIがそれに反応するようにします。コードがエラーコールバックに当たった場合、何かが本当に壊れてしまい、通常のユーザーエクスペリエンスから外れてしまいます。私はjQueryの失敗のコールバックについて聞いたことはありませんが、多分私はそれを偶然見つけたことはありません。

とにかく:「成功」とは、jQueryがリクエストを送信して回答を受け取ることができることを意味します。したがって、これはあなたが働きたい場所です。

+0

私は同意します。失敗は、リクエストが失敗*したことを示し、成功したが他の問題があったリクエストとは異なるアクションを取る必要があります。 –

+0

はい、これは実際に私がやっていたことですが、間違っていました。しかし、あなたの投稿は理にかなっています。それは正常に完了したので、私は応答を解析する必要があります。おかげで – MyDaftQuestions

+0

あなたは大歓迎です。 – iquellis

0

MVCでajaxエラーを返す簡単な方法があります。私はそれをこのようにやっている:

コントローラを:

public JsonResult testCatch() 
    { 
     try 
     { 
      //some code here 
      return Json(new { success = true, Message = "Success!" }); 

     } 
     catch (Exception ex) 
     {     
      Response.StatusCode = 500; //Write your own error code 
      Response.Write(ex.Message); 
      return null; 
     } 
    } 

ビュー:

 $.ajax({ 
      url: '@Url.Action("testCatch", "Controller")', 
      dataType: 'json', 
     }) 
     .success(function (result) { 
      //do something 

     }) 
     .error(function (xhr) { 
      alert(xhr.status +" :" + xhr.responseText); 
     }) 

この方法は、任意のエラーはtryブロック、.success()関数に存在する場合であります呼び出されません。代わりに.error()が呼び出されます。

+1

誰かが私を票決したら、私に理由を与えてくれていますか? – oopsdazie

+0

downvotersに対するプリンシパルの不在、+1 – MyDaftQuestions

関連する問題