抛出异常,但是JSON响应获得了状态成功



我在控制器中具有代码的这一部分,但是当我进行此操作并且如果工作正常,并且错误消息出现在控制台日志中。

,但看起来"成功"的状态是正确的。而且它不应该

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

您的ajax代码每次都以 success接收响应,无论json内容如何,因为您始终发送200响应(成功)。要告诉AJAX将响应作为错误处理(然后转到AJAX响应处理程序中的error方法,而不是success方法),您需要在响应中发送错误代码,即400,例如:

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

所以,如果您要抛出自定义Exception s,则需要根据其真正的http含义为每个属性设置code属性。

现在,AJAX中的successerror处理程序具有不同的参数。在success中,第一个参数是data,只是从服务器返回的数据。另一方面,在error中,第一个参数是jqXHR对象。要访问此对象中的数据,您有几个不同的参数,但是现在您需要的是json,是jqXHR.responseJSON。因此,现在您的错误消息将在response.responseJSON.message中,而不是在response.message中。在此处查看有关此信息的更多信息。

相关内容

  • 没有找到相关文章

最新更新