- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Symfony2 并执行 Ajax 调用来处理表单。我遇到的问题是,通过使用返回给我的 JsonResponse,驱动程序告诉我该值未定义。我想知道我在解决这个问题时做错了什么,并且是否可以以某种方式将错误返回到表单字段以从 Ajax 进行验证可以在表单中显示失败而无需刷新页面。
Controller :
public function createAction(Request $request){
$entity = new Student();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return new JsonResponse(array('message' => 'Success!'), 200);
}
return $this->render('BackendBundle:Student:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
Ajax 调用:
$('.form_student').submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: Routing.generate('student_create'),
data: $(this).serialize(),
success: function(response) {
alert(response.message);
},
error: function (xhr, desc, err){
alert("error");
}
})
return false;
});
最佳答案
您需要以不同于常规 HTML 请求的方式处理 XMLHttpRequest。
目前,当发出 XMLHttpRequest 但表单失败时,整个页面会再次呈现(带有“成功”状态代码),但您只想返回带有消息和“失败”状态代码的响应。
以下内容应该对您有帮助。
public function createAction(Request $request)
{
// if request is XmlHttpRequest (AJAX) but not a POSt, throw an exception
if ($request->isXmlHttpRequest() && !$request->isMethod(Request::METHOD_POST)) {
throw new HttpException('XMLHttpRequests/AJAX calls must be POSTed');
}
$entity = new Student();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
// if the form was successful and the call was an AJAX request
// respond with a JSON Response (with a 201/created status code)
if ($request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Success!'), 201);
}
// If the form was successful and the call was HTTP
// redirect to "show student"
return $this->redirect('student_show', array('id' => $entity->getId()));
}
// if request was an AJAX call and (obviously) the form was not valid
// return message about form failure
// (with a 400/Bad Request status code)
if ($request->isMethod(Request::METHOD_POST)) {
return new JsonResponse(array('message' => 'failed due to form errors'), 400);
// you could also loop through the form errors to create an array, use a custom
// form -> errors array transformer or use the @fos_rest.view_handler to output
// your form errors
}
return $this->render('BackendBundle:Student:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
已更新
JavaScript 应该像这样工作。
$('.form_student').submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: Routing.generate('student_create'),
data: $(this).serialize(),
dataType: 'json',
// if "student_create" returns a 2** status code
success: function(response) {
// should return "Success!"
alert(response.message);
},
// if "student_create" returns a non-2** status code
error: function (xhr, desc, err){
// if the response was parsed to json and has a message key
if (xhr.responseJSON && xhr.responseJSON.message) {
alert(xhr.responseJSON.message);
// otherwise use the status text
} else {
alert(desc);
}
}
});
return false;
});
关于javascript - 如何将 JsonResponse 与 ajax 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068949/
我正在使用 Django View 返回一个 JSON 对象。但是,当我使用下面的方法时,我得到的是字典的字符串表示,而不是 JSON 对象。 def api_dataset_index(reques
我正在尝试从 Web 服务器上的 MySQL 数据库中获取数据。我的目标是检索已经在 MySQL 数据库中的位置数据数组。我正在从服务器获取此数据数组,但无法将其从 jsonResponse.getJ
我有一个小问题。也许有人有想法。 我按以下方式使用 Serializer。函数 json_encode 被应用了两次的问题。 首先当我调用 $serializer->serialize($post,
我对 JsonResponse 有疑问。这是我的代码: $repo = $this->getDoctrine()->getRepository($repoName); $users = $repo->
Django 1.7 引入了 JsonResponse objects ,我尝试使用它来将值列表返回给我的 ajax 请求。 我想通过 >>> Genre.objects.values('name',
我正在使用 django 的 fileupload 并让示例中的文档正常工作。现在,我想使用 JsonResponse 修改响应像这样: def upload_file(request): i
如何从这里获取ID JsonResponse {#457 ▼ #data: "{"bill":{"id":11,"invoice_no":"9m36r9_1459170388239"}}" #
我想通过调用 json 数据的 ajax 使我的当前更具交互性,除了研究和学习之外,我还没有做任何事情。这里有一些我不是很清楚。如果 JsonResponse 和 DRF 可以提供我需要的 json
我遇到了这种错误: SyntaxError: missing ; before statement 我不知道是什么原因导致了错误,但我这里有这段代码: (function pollschedule()
所以我最近迁移到了 Python 3.6 和 Django 1.11,我的 JsonResponse 代码如下所示: return JsonResponse({'status': '1'}) 它
我在 Django 中使用 json 响应,但我有特殊字符(ñáé 等...) 我的看法 def get_agencies(request): qr = Agency.objec
使用 fastapi 并具有返回创建的 JSONResponse 的函数。我的目标是创建自定义 200 响应并将其放入具有预期 BaseModel 的 Pydantic parse_obj_as。 有
我的问题是: 返回的数据有\u0022 而不是 ""。 $em=$this->getDoctrine()->getManager(); $result = $em->getRepository('Ho
我的问题是我想返回一些从 Doctrine 中获得的数据 JsonResponse目的。我用 QueryBuilder 获取数据, 像这样: $qb = $this->getDoctrine()->g
我想知道如何从 Django 中的 JsonResponse 获取数据。我做了一个像这样工作的 JsonResponse def pfmdetail(rsid): snpid = parseSe
我正在使用 Symfony2 并执行 Ajax 调用来处理表单。我遇到的问题是,通过使用返回给我的 JsonResponse,驱动程序告诉我该值未定义。我想知道我在解决这个问题时做错了什么,并且是否可
我有一个用于处理 Ajax 请求的 Servlet,它以 JSON 格式给出响应。 我在网上收到此警告,如下评论。类型安全:方法 setResponseData(Object) 属于原始类型 Json
我想访问以下 jsonResponse 对象中返回的数据: {"results": [[1, "Probability and Stochastic Processes", 9781118324561
我刚刚设置了我的第一个 Web 服务 (REST Api),它工作正常(使用 Chrome 上的 postman 插件进行了检查)。我的 JSONresponse 中有三个参数: { "a": 1,
更新:当您使用 chrome 浏览器访问生成 JSON 作为输出的页面时。显示的结果不正确。 考虑这个生成 json 的 django 代码。当你 json.dumps 一个 long 时,这两个数字
我是一名优秀的程序员,十分优秀!