2017-09-05 7 views
1

このコードはControllerにありますが、このアクションを実行するとIFがうまく動作し、エラーメッセージがコンソールログに表示されます。例外をスローしますが、jsonレスポンスはステータスを取得します。SUCCESS

しかし、「成功」のステータスはtrueのようです。あなたが常にある(200応答を送っているので、それはない

Try { 
    if ($last['date']) { 
     if ($last['date']->format('d-m-Y') == $par['date']) { 
       throw new \Exception('error', 500); 
      } 
    } 

    return new JsonResponse([ 
     'success' => true, 
     'data' => $content, 
     'message' => 'success' 
    ]); 
} catch (\Exception $exception) { 

    return new JsonResponse([ 
     'success' => false, 
     'code' => $exception->getCode(), 
     'message' => $exception->getMessage(), 
    ]); 
} 

jQueryの

$.ajax({ 
    type: "POST", 
    url: "/app/url", 
    data: TableData, 
    dataType: "json", 
    success: function(response){ 
     console.log(response.message); 
     $('#message').html('<p class="alert alert-success">' + response.message + '</p>'); 
    }, 
    error: function (response) { 
     console.log(response.message); 
     $('#message').html('<p class="alert alert-danger">' + response.message + '</p>'); 
    } 
}); 
+2

エラーを報告するには、HTTP応答を400または500の範囲で返す必要があります。あなたの現在の実装では、成功した応答でリクエストしました。その応答にはJsonの一部が含まれています.Jsonには 'false'という値を持つ' success'というプロパティがありますが、Ajax呼び出しはエラーを示すことを知らない。レスポンスを解析することでJavaScriptで実装することができますが、より純粋な方法は、PHPが適切なエラー応答コードを返すようにすることです。 [HTTPステータスコード](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)を参照してください。 – GolezTrol

+0

例外をスローするとCATCHブロックは機能しませんか? – Ferror

+0

だから、例外をスローするのではなく、私は成功の応答を返すべきです:false – Ferror

答えて

1

あなたのAJAXコードは、関係なく、JSONコンテンツの、successとして毎回応答を受信して​​いる必要があります成功)。 、あなたはこのように、すなわち、応答で400をエラーコードを送信する必要がエラーとして応答を処理するために、AJAXを伝える(とあなたのAJAXの応答ハンドラでsuccessメソッドの代わりにerrorの方法に進みます)するには、次の

return new JsonResponse([ 
     'success' => false, 
     'code' => 400, 
     'message' => $exception->getMessage(), 
    ], 400); 

したがって、カスタムExceptionを投げている場合は、それぞれの実際のHTTPの意味に応じてcodeプロパティを設定する必要があります。

ここで、AJAXのsuccesserrorハンドラには、異なるパラメータがあります。 successでは、最初のパラメータはdataであり、単純にサーバーから返されたデータです。一方、errorでは、最初のパラメータはjqXHRオブジェクトです。このオブジェクトのデータにアクセスするには、いくつかのパラメータがありますが、JSONを使用しているので、今必要なのはjqXHR.responseJSONです。だから、あなたのエラーメッセージはresponse.messageではなく、response.responseJSON.messageになります。この詳細についてはhereを参照してください。

+0

jsonResponeからエラーメッセージを受け取る方法を教えてください。 古い方法で私にはわかりません(私の愛) – Ferror

+1

'error'メソッドのデータは' response.responseJSON'にありますので、 'response.responseJSON.message'で取得してください。これをさらにデバッグするには、エラーハンドラに 'console.log(response);'を入れて、すべての応答オブジェクトが見ることができます。 – ishegg

+0

私はこれに言及する答えを編集しました。 – ishegg

関連する問題