4

我正在使用$.post. 从服务器我返回 json 响应。当我直接在浏览器中打开服务器 url 时,它会成功返回。但是从js它不起作用。 在此处输入图像描述 我调用的链接是this( http://54.249.240.120/qcorner/login)。

<html>                                                                  
    <head>                                                                  
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    </head>                                                                 
    <body>
        <input type="button" id="testID">
        <script type="text/javascript">                                         
            $(document).ready(function() {
                $("#testID").click(function() {
                    $.post('http://54.249.240.120/qcorner/login',function(result){
                        alert(result);
                    });
                });
            });
         </script>                                                               
     </body>                                                                 
 </html>

我也在 Firefox 中尝试过。在那我得到200 OK,但没有回应。

为什么会这样

4

5 回答 5

5

问题是它是一个跨域请求,可以通过打开javascript控制台查看返回的错误:

XMLHttpRequest cannot load http://54.249.240.120/qcorner/login. Origin null is not allowed by Access-Control-Allow-Origin.

您需要确保将Access-Control-Allow-Origin标头设置为允许这种情况发生,否则 Chrome 将取消请求。

于 2013-04-03T20:17:30.510 回答
1

我怀疑您遇到了跨域资源共享问题。我猜您不是从 访问此页面http://54.249.240.120/,因为 Chrome 正在网络选项卡中明确显示它(如果它是同一个域,通常它不会这样做)。

长话短说,您不能通过 Javascript 发布到另一个域名。如果您在 www.example.com 上访问它,浏览器不会将 IP 地址识别为同一个域名(即使域名在那里解析)。最简单的方法是,如果您可以控制整个情况,只需将该登录代码与您正在测试的代码放在同一个域中。在本地环境中,您可以使用您的 [hosts 文件执行此操作,例如54.249.240.120 www.example.com将 example.com(替换为您访问测试页面的您自己的域)到 IP 地址。但是,这不适用于公共互联网。

如果您必须通过 javascript 发布到另一个域,则需要考虑实施 CORS 标准。这是我发现的一篇文章,解释了如何在 PHP 中实现它。

于 2013-04-03T20:17:53.043 回答
0

HTML 200 OK 与有效响应不同。这意味着服务器收到了您的请求,但这并不意味着您的 PHP 文件实际上返回了可用数据。它可能完全返回一个空响应。是时候调试 PHP 文件了。我建议临时登录到文件或使用FirePHP。如果错误显示被禁用(因为它应该在生产服务器上),如果您的脚本在生成任何输出之前失败,就会发生这种情况。

于 2013-04-03T20:15:27.183 回答
0

请求到底发生了什么?您不能使用问题中列出的内容进行 ajax 请求跨域。

但是,您向 URL 发送了一个空的 POST 请求,当我复制一个空的 post 请求时,它会响应 HTTP 206 错误,这是您需要解决的问题。

curl -X POST http://54.249.240.120/qcorner/login

{"head":{"status":206,"message":"Only 0 fields received, required 2"},"body":""}

于 2013-04-03T20:17:52.247 回答
0

我和你有同样的问题,我所做的很简单。在接收 ajax 请求的 PHP 文件中,只需在发送响应之前添加此行:

<?php 
     header("Access-Control-Allow-Origin: *");
     ... // your code here
?>
于 2016-06-10T11:26:17.550 回答