9

Ajaxでエラーを処理しようとしています。このために、私は単にこのSOの質問をSymfonyで再現しようとしています。

$.ajaxSetup({
    error: function(xhr){
        alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
    }
});

しかし、Symfony2でトリガーするコントローラーのコードがどのようになるかわかりませんheader('HTTP/1.0 419 Custom Error');。たとえば、これに個人的なメッセージを添付することは可能ですかYou are not allowed to delete this post。JSON応答も送信する必要がありますか?

誰かがこれに精通しているなら、私は本当にあなたの助けをいただければ幸いです。

どうもありがとう

4

1 に答える 1

14

Symfony\Component\HttpFoundation\Responseアクションでは、オブジェクトを返すことができ、setStatusCodeメソッドまたは2番目のコンストラクター引数を使用してHTTPステータスコードを設定できます。もちろん、必要に応じて、応答のコンテンツをJSON(またはXML)として返すことも可能です。

public function ajaxAction()
{
    $content = json_encode(array('message' => 'You are not allowed to delete this post'));
    return new Response($content, 419);
}

また

public function ajaxAction()
{
    $response = new Response();
    $response->setContent(json_encode(array('message' => 'You are not allowed to delete this post'));
    $response->setStatusCode(419);
    return $response;
}

更新: Symfony 2.1を使用している場合は、のインスタンスを返すことができますSymfony\Component\HttpFoundation\JsonResponse(ヒントを提供してくれたcatontheflatに感謝します)。このクラスを使用すると、正しいContent-typeヘッダーも送信されるという利点があります。例えば:

public function ajaxAction()
{
    return new JsonResponse(array('message' => ''), 419);
}
于 2012-09-12T10:21:00.167 に答える