Javascript Ajax请求通过.fail()回调时,我的函数应该返回什么?

Javascript Ajax请求通过.fail()回调时,我的函数应该返回什么?,javascript,php,jquery,ajax,symfony,Javascript,Php,Jquery,Ajax,Symfony,我的Symfony2控制器中有一个函数,从视图中通过Ajax调用。这是控制器端的代码(示例不是真实的): 然后在视图中,我调用以下事件: $.post(Routing.generate('addFab'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) { // if all goes fine then show messages and much more } }).fail(functi

我的Symfony2控制器中有一个函数,从视图中通过Ajax调用。这是控制器端的代码(示例不是真实的):

然后在视图中,我调用以下事件:

$.post(Routing.generate('addFab'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
    // if all goes fine then show messages and much more
    }
}).fail(function () {
   // if something goes wrong then show and alert and try to show info to the user 
    return false;
}).always();

现在,如果
$form->isValid()
为真或假,请求将始终发出,因此将通过
.done()
回调,因此我需要返回一些内容,不清楚是什么,如果表单无效,响应将通过
.fail()
回调,否则我将始终需要检查是否,例如,
$response['success']
.done()
回调中为TRUE或FALSE,请忘记
.fail()
,我觉得这似乎是错误的。我现在不知道正确的方法是否是使用HttpFoundation组件或其他东西返回异常,所以有什么建议吗?最好的方法是什么?

如果我在这里遗漏了一些东西,我不会感到惊讶,因为我不使用$.post,我使用$.ajax,我想这几乎是一样的。如果我在这里,则.fail是指服务器响应时出现IIS错误,不应用于表单验证。这应该在您的应用程序逻辑中完成,这样可以在.done中正确处理。如果我需要返回一个没有详细信息的否定响应,那么我将返回“false”,否则将返回一个填充的json结果。

如果我在这里遗漏了一些东西,我不会感到惊讶,因为我不使用$.post,我使用$.ajax,我想这几乎是相同的。如果我在这里,则.fail是指服务器响应时出现IIS错误,不应用于表单验证。这应该在您的应用程序逻辑中完成,这样可以在.done中正确处理。如果我需要返回一个没有详细信息的否定响应,那么我将返回“false”,否则将返回一个填充的json结果。

如果我在这里遗漏了一些东西,我不会感到惊讶,因为我不使用$.post,我使用$.ajax,我想这几乎是相同的。如果我在这里,则.fail是指服务器响应时出现IIS错误,不应用于表单验证。这应该在您的应用程序逻辑中完成,这样可以在.done中正确处理。如果我需要返回一个没有详细信息的否定响应,那么我将返回“false”,否则将返回一个填充的json结果。

如果我在这里遗漏了一些东西,我不会感到惊讶,因为我不使用$.post,我使用$.ajax,我想这几乎是相同的。如果我在这里,则.fail是指服务器响应时出现IIS错误,不应用于表单验证。这应该在您的应用程序逻辑中完成,这样可以在.done中正确处理。如果我需要返回一个没有详细信息的否定响应,那么我将返回“false”,否则将返回一个填充的json结果。

当服务器返回4xx或5xx等错误状态时,或者当返回数据的客户端解析错误时,或者当请求有中止调用时,将调用错误处理程序

在这种情况下,由于基于验证,您希望将请求发送给故障处理程序,因此需要将响应状态设置为错误状态,如400。因此,在
else
块中,请尝试

<?php
http_response_code(400);
?>

当服务器返回4xx或5xx等错误状态,或当客户端解析返回的数据时出错,或当请求发生中止调用时,将调用错误处理程序

在这种情况下,由于基于验证,您希望将请求发送给故障处理程序,因此需要将响应状态设置为错误状态,如400。因此,在
else
块中,请尝试

<?php
http_response_code(400);
?>

当服务器返回4xx或5xx等错误状态,或当客户端解析返回的数据时出错,或当请求发生中止调用时,将调用错误处理程序

在这种情况下,由于基于验证,您希望将请求发送给故障处理程序,因此需要将响应状态设置为错误状态,如400。因此,在
else
块中,请尝试

<?php
http_response_code(400);
?>

当服务器返回4xx或5xx等错误状态,或当客户端解析返回的数据时出错,或当请求发生中止调用时,将调用错误处理程序

在这种情况下,由于基于验证,您希望将请求发送给故障处理程序,因此需要将响应状态设置为错误状态,如400。因此,在
else
块中,请尝试

<?php
http_response_code(400);
?>

我知道这个问题已经得到了回答,但我认为这不是最好的解决办法

JsonResponse
对象将状态代码作为第二个参数,因此不应在代码中粘贴
http\u response\u code

另外,与其将您的
success
默认为
true
,不如将其默认为
false
,然后在success中更新它

你可以这样做

public function addFabAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $response['success'] = false;
    $status = null;

    if ($request->isXmlHttpRequest()) {
        $entity = new Entity();
        $form = $this->createForm(new EntityForm(), $entity);
        $form->handleRequest($request);

        if ($form->isValid()) {
            try {
                $em->persist($entity);
                $em->flush();

                $response['entities'] = array();
                $dataResponse = array();
                $dataResponse['colOne'] = $entity->getColumnOne();
                $dataResponse['colTwo'] = $entity->getColumnTwo();

                $response['entities'][] = $dataResponse;

                $response['success'] = true;
            } catch (Exception $ex) {
                $status = 400; // Your error code
                $response['error_message'] = 'something';
            }
        } else {
            $status = 400;
            $response['error_message'] = 'form not valid';
        }

        return new JsonResponse($response, $status ?: 200);
    }
}

另外,如果请求不是
XmlHttpRequest
,您也没有响应,但很明显,这可能会在其他地方处理。

我知道这已经得到了回答,但我认为这不是最好的方式

JsonResponse
对象将状态代码作为第二个参数,因此不应在代码中粘贴
http\u response\u code

另外,与其将您的
success
默认为
true
,不如将其默认为
false
,然后在success中更新它

你可以这样做

public function addFabAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $response['success'] = false;
    $status = null;

    if ($request->isXmlHttpRequest()) {
        $entity = new Entity();
        $form = $this->createForm(new EntityForm(), $entity);
        $form->handleRequest($request);

        if ($form->isValid()) {
            try {
                $em->persist($entity);
                $em->flush();

                $response['entities'] = array();
                $dataResponse = array();
                $dataResponse['colOne'] = $entity->getColumnOne();
                $dataResponse['colTwo'] = $entity->getColumnTwo();

                $response['entities'][] = $dataResponse;

                $response['success'] = true;
            } catch (Exception $ex) {
                $status = 400; // Your error code
                $response['error_message'] = 'something';
            }
        } else {
            $status = 400;
            $response['error_message'] = 'form not valid';
        }

        return new JsonResponse($response, $status ?: 200);
    }
}

另外,如果请求不是
XmlHttpRequest
,您也没有响应,但很明显,这可能会在其他地方处理。

我知道这已经得到了回答,但我认为这不是最好的方式

JsonResponse
对象将状态代码作为第二个参数,而不是粘贴
http\u response\u co