0
我有一个接收JSON请求的控制器方法。控制器返回提交表单的数据,然后将更新后的数据异步加载到页面中。然后,表单可以重新提交任意次数而无需重新加载页面。带AJAX的Symfony 2:向控制器提交格式化请求方法
我遇到的问题与控制器方法正在读取的JSON数据在初始表单提交后有所不同。
相关的控制器代码:
/**
* Creates a new HoursSpecial entity.
*
* @Route("/", name="hoursspecial_postcreate")
* @Method("POST")
*/
public function postCreateAction(Request $request){
$requestData = $request->request->all();
$date = $requestData['eventDate'];
...
}
这里是AJAX代码:
/* Handle submission of special hours form */
$('.specialHours_form').on('submit', function(event){
var targetForm = $(this);
event.preventDefault();
ajaxObject = {
url: $(this).attr("action"),
type: 'POST',
contentType: "application/json; charset=UTF-8",
data: JSON.stringify({"openTime":$("#appbundle_hoursspecial_openTime", this).val(), "closeTime":$("#appbundle_hoursspecial_closeTime", this).val(), "status":$("input[name^='appbundle_hoursspecial']:checked", this).val(), "event":$("#appbundle_hoursspecial_event").val(), "area":$("#appbundle_hoursspecial_area", this).val(), "eventDate":$("#appbundle_hoursspecial_eventDate", this).val()})
}
$.ajax(ajaxObject)
.success(function(data,status,xhr) {
console.log(status);
$('#special_hours_container').html(data); //show special hours for chosen week
$('#dynamic_daterange').html(' Week of ' + $('#special_firstday').html() + ' thru ' + $('#special_lastday').html() + ' ');
makeTimepicker('.specialHours_form', '#appbundle_hoursspecial_openTime, #appbundle_hoursspecial_closeTime'); //apply timepicker to special hours elements
$('span.label-success, span.label-danger').remove();
})
.fail(function(data,status,xhr) {
$('span.label-success, span.label-danger').remove();
$('#appbundle_hoursspecial_submit', targetForm).after('<span class="label label-danger"><span class="glyphicon glyphicon-remove"></span></span>');
console.log(status);
console.log("dangah!");
})
.always(function(data,status,xhr) {
console.log(status);
});
});
所以,如果我身边提交此表在第一时间和运行$的RequestData的的var_dump,我得到(使用样本数据):
array(6) { ["openTime"]=> string(5) "01:00" ["closeTime"]=> string(5) "11:00" ["status"]=> string(1) "0" ["event"]=> string(1) "1" ["area"]=> string(2) "10" ["eventDate"]=> string(10) "2016-01-04" }
但是,如果我去做了第二次,该数据被放置在第二阵列,其关键的里面是我提交表单的名字:我结束了错误
array(1) { ["appbundle_hoursspecial"]=> array(7) { ["openTime"]=> string(5) "00:30" ["closeTime"]=> string(5) "02:00" ["status"]=> string(1) "0" ["eventDate"]=> string(10) "2016-01-04" ["area"]=> string(2) "10" ["event"]=> string(1) "1" ["submit"]=> string(0) "" } }
而且很明显:
Notice: Undefined index: eventDate
必须有这是一个原因,我无法弄清楚它可能是什么!我知道我可以在我的控制器中检查appbundle_hoursspecial键的存在,但是如果我不需要,我宁愿不要。
使用'变种ajaxObejct',否则你定义'ajaxObject'为全局变量。不确定它是否与你的问题有关,但它可能有帮助。 –
为什么在json中发布数据?你可以很容易地使用普通的后期字段,就像你发布你的表单没有ajax一样:$ .post('server.php',$('#theForm')。serialize()) –
@Frankbeen我正在使用FOSRestBundle并拥有它设置为以JSON格式要求POST数据。 – Ravioli87