如何在 XAMPP 上启用跨域资源共享?

ale*_*lex 5 php apache config cross-domain

我的本地主机上有一个 html 文件,其中包含一个表单和处理发布数据的 jquery/ajax。一个简单的php脚本在mysql数据库表中查找数据

这是主要部分:

// $.post('lookup_update.php', $(this).serialize()) //<- local part which works
   $.post('http://www.example.com/projectX/lookup_update.php', $(this).serialize()).done(function (data)
                            { etc.
Run Code Online (Sandbox Code Playgroud)

但是当我指向在线 lookup_update.php 时,我在 chrome 中收到以下错误消息

XMLHttpRequest 无法加载http://www.example.com/projectX/lookup_update.php。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问Origin ' http://localhost '。响应具有 HTTP 状态代码 404。

据我了解,我需要使用

 header("Access-Control-Allow-Origin: *");
Run Code Online (Sandbox Code Playgroud)

对于 php。但是当我将它添加到 example.com/lookup_update.php 时,当 localhost 文件尝试调用它时,该文件会给出 404。

我还尝试将以下内容添加到我的 Xampp apache 配置文件中

Header set Access-Control-Allow-Origin "*"
Run Code Online (Sandbox Code Playgroud)

如何从我的本地 XAMPP 设置中正确启用跨源资源?

[编辑]这是我在本地主机上的简单表格

<!--Begin form-->
    <div id="form" class="result">
        <form method="post" id="reg-form"  class="form-horizontal">
            <div class="controls">
                <input type="text" name="code" id="code" placeholder="Code"  class="form-control input-lg" />      
            </div>
        </form>
    </div>
    <!--End form-->
Run Code Online (Sandbox Code Playgroud)

使用以下表单 jquery 代码

    <script type="text/javascript">
            $(document).ready(function ()
            {
                $(document).on('submit', '#reg-form', function ()
                {
                    var tmpCode = $("#code").val();

//                    $.post('lookup_update.php', $(this).serialize())
                      $.post('http://www.example.com/projectX/lookup_update.php', $(this).serialize())
                            .done(function (data)
                            {

                                $("#reg-form").fadeOut('slow', function ()
                                {
                                    $(".result").fadeIn('slow', function ()
                                    {
                                        console.log("inner test " + tmpCode);
                                        $(".result").html(data);


                                        setTimeout(function () {
                                            location.reload();
                                            $('input').val("");
                                        }, 3000);


                                    });
                                });
                            })
                            .fail(function ()
                            {
                                alert('fail to submit the data');
                            });
                    return false;
                });


            });

        </script>
Run Code Online (Sandbox Code Playgroud)

[编辑2 ]

好的,我认为它与在线 lookup_update.php 文件无关,因为我正在使用它在另一个文件中进行测试

            var testXHR = $.post("http://www.example.com/projectX/lookup_update.php", function (data) {
            alert("success:" + data);
        })
Run Code Online (Sandbox Code Playgroud)

在警报弹出窗口中,我看到了预期的数据

Vin*_*sPJ 10

如果你想在httpd.conf文件中允许 CORS,这对我有用:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type, X-Token-Auth, Authorization"
Run Code Online (Sandbox Code Playgroud)

将其放在文件Listen 80中该行的下方httpd.conf

当我只使用 时Header set Access-Control-Allow-Origin "*"GET请求有效,但POST没有。

测试的环境是使用XAMPP的Apache服务器上的Windows 10。Apache 正在托管一个 Laravel 项目。


Mon*_*nty 8

您必须在lookup_update.php的开头编写以下代码

header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
Run Code Online (Sandbox Code Playgroud)

您可以只写 Ip 地址,而不是 *。

或者

首先,您必须检查本地主机或其他服务器上的问题所在。

尝试以下代码:如果您在警报中获取一些数据,则问题出在本地主机上,否则在其他服务器上。

$.post( "test.php", function( data ) {
alert( "Data Loaded: " + data );
});
Run Code Online (Sandbox Code Playgroud)