我想通过AJAX(AngularJS)发送一个Symfony表单。
但是,即使数据被清楚地发送,Symfony也会将表单称为“未提交”(实际上没有错误,但有些调试显示isSubmitted
返回false
)
以下是 FOSUserBundle注册表单的测试。
编辑:虽然图片看起来很小,但它们已被充分解析,因此如果以完整尺寸显示它们,它们是完全可读的。
以下是我使用HTTP表单标准提交时的日志:
以下是使用 AJAX提交时的日志:
你对此事有什么看法吗?任何指针?或者我可以检查的任何其他日志?
编辑:
我使用default FOSUserBundle registration controller。
我几乎使用default FOSUserBundle registration form,但我添加了一个(当前)空的子表单,我将在开发中进一步需要它。
namespace NONG\SecurityBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class UserRegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options) {}
public function getParent() {
return 'fos_user_registration';
}
public function getName() {
return 'nong_user_registration';
}
}
使用HTML表单发送的标题和数据(注意,在接受星号之前添加了一个点,以便着色保持正确):
POST /server/web/testfosuser/register/ HTTP/1.1
Host: mywebsite.com
Connection: keep-alive
Content-Length: 229
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/.*;q=0.8
Origin: http://mywebsite.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://mywebsite.com/server/web/testfosuser/register/
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxx
fos_user_registration_form%5Bemail%5D=bidon%40bidon.com&
fos_user_registration_form%5Busername%5D=bidon&
fos_user_registration_form%5BplainPassword%5D%5Bfirst%5D=bidon&
fos_user_registration_form%5BplainPassword%5D%5Bsecond%5D=bidon
使用AJAX请求发送的标头:(注意,在接受星号之前添加了一个点,以便着色保持正确):
POST /server/web/testfosuser/register HTTP/1.1
Host: mywebsite.com
Connection: keep-alive
Content-Length: 229
Accept: application/json, text/plain, */.*
Origin: http://mywebsite.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
Content-Type: application/json;charset=UTF-8 application/x-www-form-urlencoded; charset=UTF-8
Referer: http://mywebsite.com/client/
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxx
fos_user_registration_form%5Bemail%5D=bidonqdsfqsdf%40qsdf&
fos_user_registration_form%5Busername%5D=charles222&
fos_user_registration_form%5BplainPassword%5D%5Bfirst%5D=bidon&
fos_user_registration_form%5BplainPassword%5D%5Bsecond%5D=bidon
答案 0 :(得分:1)
我有类似的问题,我在控制器内部更改了以下内容:
$user = new User();
$form = $this->createForm(
new UserRegistrationType(),
$user,
array(
'attr' => array('novalidate' => 'novalidate'),
'action' => $this->generateUrl('user_registration')
)
);
转动html5错误气泡并设置动作网址直接对我有用。如果这不起作用,请显示您的JS代码。
答案 1 :(得分:1)
我终于设法找到了更正:
正确的网址是...../register/
,最终/
我在忘记AJAX请求时忘记了。
但是,我不确定这里涉及的机制是什么。最深的我可以去博弈(当使用错误的URL时)在HttpFoundationRequestHandler
,其中$request->getMethod()
调用返回GET(而不是POST),因此不提交表单。