抛出异常,但json响应获取状态SUCCESS

时间:2017-09-05 14:23:10

标签: php symfony jsonresponse

我在Controller中有这部分代码,但是当我执行此操作并且IF工作正常并且错误消息出现在控制台日志中时。

但它看起来像是成功'状态为真。它不应该

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>');
    }
});

1 个答案:

答案 0 :(得分:1)

您的AJAX代码每次都会收到success的响应,无论JSON内容如何,​​因为您始终发送200响应(这是成功的)。要告诉AJAX将响应处理为错误(并转到AJAX响应处理程序中的error方法而不是success方法),您需要在响应中发送错误代码,即{{ 1}},像这样:

400

因此,如果您要丢弃自定义return new JsonResponse([ 'success' => false, 'code' => 400, 'message' => $exception->getMessage(), ], 400); ,则需要根据其真实的HTTP含义为每个设置Exception属性。

现在,AJAX中的codesuccess处理程序具有不同的参数。在error中,第一个参数是success,只是从服务器返回的数据。另一方面,在data中,第一个参数是error个对象。要访问此对象中的数据,您有一些不同的参数,但由于您拥有JSON,您现在需要的是jqXHR。因此,现在您的错误消息将位于jqXHR.responseJSON,而不是response.responseJSON.message。详细了解此here