我真的不明白如何处理来自ajax请求的帖子数据。这是我的javascript:
$.ajax({
type: "POST",
url: Routing.generate('save'),
contentType: 'application/json; charset=UTF-8',
data: {
title: title,
description: description,
questions: questions,
}
});
在控制器操作中获取数据的唯一方法是:
$content = $request->getContent()
$ content是一个url参数字符串。 为什么我不能正常获取数据:
$request->get('title')
使用jquery ajax methd处理post数据的正确方法是什么?
非常感谢。
修改
所以,我发现了以下问题:
在我当前的项目中,请求如下所示:
$.ajax({
type: "POST",
url: Routing.generate('poll_save'),
data: {
title: title
}
})
通过请求有效负载请求数据,但我不知道原因。
在一个干净的项目中,请求如下所示:
$.ajax({
type: "POST",
url: '{{path('_demo')}}',
data: {
title: 'title',
description: 'description',
questions: 'questions',
pollid: 1
}
})
我项目中的任何内容都出错了。您是否知道为什么通过请求有效负载来请求数据?
答案 0 :(得分:9)
您是否在控制器中使用请求对象?
<?php
namespace Acme\DemoBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
//...other things to use
class MyController extends Controller
{
public function handleRequestAction() {
$request = $this->get('request');
//request your data
$title = $request->get('title');
//or in one line
$title = $this->get('request')->request->get('title');
}
}
?>
当我想从ajax调用中获取数据时,这是我的正常方式。 你能发布$ content包含的内容吗?
我发现像你一样发布数据没问题。构造一个json对象可能会有所帮助,但是你这样做的方式对我来说似乎很好。我也是这样做的。
修改强>
通常,您也可以通过以下方式访问请求中的所有数据:
$all = $request->request->all();
也许你可以var_dump()
变量来看看是否有东西。
答案 1 :(得分:1)
您可以使用JSON.stringify构造json对象并将JSON对象传递给控制器。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify
var obj = {
title: title,
description: description,
questions: questions
};
$.ajax({
type: "POST",
url: Routing.generate('save'),
contentType: 'application/json; charset=UTF-8',
data: JSON.stringify(obj)
});
答案 2 :(得分:1)
测验 - 表格名称 序列化 - 填充变量
$.ajax({
url: $("#quiz").attr("action"),
data: $("#quiz").serialize(),
type: 'POST'
});
或
$.ajax({
url: $("#commentForm").attr("action"),
data: {
comment: commentFormID.val()
},
type: 'POST'
});
控制器 - 更像以前的评论建议。
$request = $this->get('request');
$usercomment=$request->request->get('parameterName');
答案 3 :(得分:0)
为什么选择Json?我的意思是内容类型json的要求?如果没有,这就是我处理ajax和使用FOSRoutingbundle的方式,我可以看到你正在使用它。
$(document).ready(function(){
$('#myForm').submit( function(e){
e.preventDefault();
var $form = $(this);
var $formPHP = $form.serializeArray();
var $url = Routing.generate( 'route_to_use');
$.post( $url, $formPHP, function(data){
.....
});
});
});
然后在控制器中,您可以将其用作普通请求。