Javascript Ajax请求通过.fail()回调时,我的函数应该返回什么?
我的Symfony2控制器中有一个函数,从视图中通过Ajax调用。这是控制器端的代码(示例不是真实的): 然后在视图中,我调用以下事件: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
$.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