$ .post在Chrome中被取消

时间:2013-04-03 20:05:54

标签: php javascript jquery ajax post

我使用$.post调用php文件。从服务器我返回json响应。当我直接在浏览器中打开服务器URL时,它会成功返回。但是从js开始它不起作用。 enter image description here 我调用的链接是这个(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,但没有回应。

为什么会这样?

5 个答案:

答案 0 :(得分: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会取消请求。

答案 1 :(得分:1)

我怀疑你遇到了Cross-origin resource sharing问题。我猜你没有从http://54.249.240.120/访问此页面,因为Chrome已在网络标签中明确显示(如果它是同一个域,通常不会这样做)。

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

如果您必须通过javascript发布到另一个域,则需要考虑实施CORS标准。 Here's an article我找到了解释如何在PHP中实现它。

答案 2 :(得分:0)

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

答案 3 :(得分: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":""}

答案 4 :(得分:0)

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

<?php 
     header("Access-Control-Allow-Origin: *");
     ... // your code here
?>