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

时间:2015-11-10 10:29:18

标签: php ajax symfony routing fosuserbundle

我有一个主域名site.dev和一个子域名sub.site.dev。

我与来自site.dev的FOSUserBundle有一个有效的连接请求。 现在,我也想从子域sub.site.dev中获得此请求。

当我尝试这样做时,我在调试控制台中出错: XMLHttpRequest cannot load http://site.dev/ajax/check_login_ajax. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://sub.site.dev' is therefore not allowed access.

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

我已经看过"主持人"路由文件中的参数,但无法找到适用于这两个域的任何内容。我想过2个防火墙,但它也不起作用。

非常感谢。

编辑:在这里,我正在讨论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');
    });

编辑3:我只是认为执行了一个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:我的查询的statusText是" OK"并且状态是" 200",那么,为什么.fail代码被执行...?

编辑5:要真正了解情况。 当我尝试访问check_login_ajax时,我被重定向到铭文。 这是我的调试开发人员工具栏的预览

debug developer toolbar

正如您在防火墙中看到的那样,login_path设置为login_path: fos_user_registration_register。 fos_user_registration_register是题词/路线。

当我执行编辑3中的AJAX请求时,我得到了结果:

200
OK
2

1 个答案:

答案 0 :(得分:0)

将此代码添加到.htaccess下的网络文件夹中:

1

不要忘记使用您的真实子域名更改“http://sub.site.dev”。

编辑2

尝试像这样实现AJAX:

<IfModule mod_headers.c>
    Header add Access-Control-Allow-Origin "http://sub.site.dev"
</IfModule>

您也可以使用AjaxSubmit

$.ajax({
           type: "POST",
           url: "{{path('check_login_ajax')}}",
           data: $("#idForm").serialize(), // serializes the form's elements.
           success: function(data)
           {

           }
       });

我希望这有帮助。