Php 具有子域Symfony2的Ajax请求(FOSUserBundle示例)

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因此,不允许访问。 以

我有一个主域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因此,不允许访问。

以下是我的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){

      }
)};