我正在运行一个基于Symfony 2.8
的网络应用程序,它使用Ajax
将一些表单数据发送回控制器。
因此,一切正常,但自最新的macOS更新到版本10.13.4用户开始报告,提交表单在Safari中不再起作用。 10.13.4上的其他macOS版本和其他浏览器仍然可以正常工作,因此它似乎是Safari中的一个问题。当然我向Apple提交了一份错误报告,但我不认为,我会从那里得到反馈......
所以我试图解决问题:
// jQuery handling the submit button click
...
var data = new FormData(form[0]);
$.ajax({
url : formUrl,
type : 'POST',
data : data,
contentType: false,
processData: false,
context : this,
success : function(response) {
...
},
error: function (xhr, ajaxOptions, thrownError) {
...
}
});
// Symfony Controller
...
$form->handleRequest($request);
if ($form->isValid() && !$read_only) {
// Submitted form data is VALID when not using Safari...
} else {
// Submitted form data is Invalid when using Safari...
$errors = $form->getErrors(); // empty
$errors = $form->getErrors(true); // empty
$errors = $form->getErrorsAsString(); // empty
}
因此,使用Safari 10.13.4时提交的表单数据无效,并且对所有其他浏览器都有效。
然而,Symfony功能不会显示任何错误。我假设提交的数据一般无效,没有有效的表单数据。我怎么检查这个?
在Safari中查看Ajax请求内容的最佳方法是什么?如何输出new FormData(...)
对象的内容?
知道如何隔离错误吗?
答案 0 :(得分:0)
你有没有试过普通的'(简单)javascript(没有jQuery)?
var formElement = document.querySelector("form");
var request = new XMLHttpRequest();
request.open("POST", "submitform.php");
request.send(new FormData(formElement));
对此简单表单提交感兴趣。
我应该补充:FormData对象上有一个.getAll()
方法。您可console.log()
确保值存在。