Php 具有子域Symfony2的Ajax请求(FOSUserBundle示例)
我有一个主域site.dev和一个子域sub.site.dev 我有一个来自site.dev的FOSUserBundle的工作连接请求。 现在,我想允许这个来自子域sub.site.dev的请求 尝试执行此操作时,调试控制台中出现错误:Php 具有子域Symfony2的Ajax请求(FOSUserBundle示例),php,ajax,symfony,routing,fosuserbundle,Php,Ajax,Symfony,Routing,Fosuserbundle,我有一个主域site.dev和一个子域sub.site.dev 我有一个来自site.dev的FOSUserBundle的工作连接请求。 现在,我想允许这个来自子域sub.site.dev的请求 尝试执行此操作时,调试控制台中出现错误: XMLHttpRequest无法加载http://site.dev/ajax/check_login_ajax. 请求的资源上不存在“Access Control Allow Origin”标头。起源'http://sub.site.dev因此,不允许访问。 以
XMLHttpRequest无法加载http://site.dev/ajax/check_login_ajax. 请求的资源上不存在“Access Control Allow Origin”标头。起源'http://sub.site.dev因此,不允许访问。
以下是我的security.yml文件的一部分:
firewalls:
main:
pattern: ^/
form_login:
login_path: fos_user_registration_register
check_path: check_login_ajax
success_handler: user.security.authentication_handler
failure_handler: user.security.authentication_handler
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
logout:
path: fos_user_security_logout
target: /
anonymous: true
我已经在路由文件中查看了“主机”参数,但找不到任何适合这两个域的参数。我考虑了两个防火墙,但它不工作太多
非常感谢
编辑:这里,我谈论的是FOSUserBundle路由和Ajax,但我希望此解决方案适用于我选择的所有Ajax请求
编辑2:当我执行您可以在下面看到的AJAX请求时,我执行了.fail代码:
$.ajax({
type: "POST",
url: myRoute,
dataType: 'json',
data: {
_username: $('#co_username').val(),
_password: $('#co_password').val(),
_remember_me: false,
_csrf_token: $('#co__csrf_token').val()
}
}).done(function (data) {
console.log('1');
}).fail(function (data) {
console.log('2');
});
edit3:我刚刚估计会执行一个AJAX请求,但Symfony2调试工具栏中没有显示任何内容。因此,我执行了这段代码,尝试:
$.ajax({
type: "POST",
url: Routing.generate('check_login_ajax'),
dataType: 'json',
data: $('#connection-form').serialize(),
success: function(data) {
console.log('3');
}
}).done(function (data) {
console.log('1');
}).fail(function (data) {
console.log('2');
});
“2”仍在打印中,但之后我已连接
如何将ajaxSubmit
与我的代码一起使用?我必须包含jQuery的外部库吗?这到底有什么意义?不一定能得到所有的东西
编辑4:我查询的状态文本为“OK”,状态为“200”,那么,为什么执行.fail代码
编辑5:以真正了解情况。
当我尝试访问check\u login\u ajax时,我被重定向到铭文。
这是调试开发人员工具栏的预览
正如您在我的防火墙中看到的,登录路径设置为login\u path:fos\u user\u registration\u register
。fos_用户_注册_注册为铭文/路线
当我执行编辑3中的AJAX请求时,结果如下:
200
OK
2
将此代码添加到web文件夹下的.htaccess中:
<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin "http://sub.site.dev"
</IfModule>
你也可以使用
我希望这能帮上忙。谢谢,你是说web/.htaccess还是真的在所有项目的根目录下,与composer*、.gitignore等处于同一级别?我刚刚在我的站点目录中创建了.htaccess,我添加了
标题添加访问控制允许源代码“sub.site.dev”
,但什么都没有发生。因此,我删除了此文件并尝试将其添加到web/.htaccess,但仍然没有发生任何事情…抱歉,是的,请在web文件夹的.htaccess中添加这些行。通常,它已经被创建了。htaccess只需添加行。谢谢,我认为现在更好了。我没有显示错误,但是我的AJAX请求没有执行。我会看一看JS代码,我会给你一个反馈!有关更多详细信息,请参见我的编辑5(前面是编辑3和编辑4)@tungius!非常感谢。
$.ajax({
type: "POST",
url: "{{path('check_login_ajax')}}",
data: $("#idForm").serialize(), // serializes the form's elements.
success: function(data)
{
}
});
$(this).ajaxSubmit({
url: "{{path('check_login_ajax')}}",
type: "POST",
success: function (result){
}
)};