jQuery客户端不接受我的服务器响应

时间:2014-10-05 01:06:16

标签: php jquery python http

前几天我写了一个带有烧瓶的python web服务,在我的手机(android app)和我的服务器之间发送一些JSON-Data。

一切正常:我可以通过GET发送和接收数据,使用我的Android应用程序发送和使用程序“cURL”。

然后我决定创建一个简单的Web应用程序作为我的Web服务的客户端,并开始斗争。所以我编写了我能想象到的最简单的客户端和服务器:

Client.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>TestClient</title>

    <!-- jQuery -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js</script>


    </head>
    <body>

    <script type="text/javascript">       
       $.get("http://SERVER_URL/test/1", function(data,status){
       alert("Data: " + data + "\nStatus: " + status);
     });

     </script>

   </body>
  </html>

我的python响应不会显示在浏览器中,所以我还创建了一个非常基本的PHP-Server,PHP-framework Slim在我的Apache2服务器上作为虚拟主机运行:

的index.php:

// Slim import and basic stuff...

// GET route
$app->get('/test/:id', function ($id) {
    echo "This is test $id";
});

因此,当我手动调用此站点(来自Firefox或Chrome)时,我得到一个简单的“这是测试#1”字符串,如我所料,在我的浏览器中显示

但是一旦我运行“Client.html”,我什么都没收到:没有任何警报或其他内容。当我使用Firefox的控制台检查错误或其他内容时,一切似乎都很好:

REQUEST:

02:49:03.000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0
Origin: null
Host:   213.165.80.252
Connection: keep-alive
Accept-Language:    de,en-US;q=0.7,en;q=0.3
Accept-Encoding:    gzip, deflate
Accept: */*

响应:

Response-Header Δ91ms
X-Powered-By:   PHP/5.4.4-14+deb7u14
Vary:   Accept-Encoding
Server: Apache/2.2.22 (Debian)
Keep-Alive: timeout=5, max=100
Date:   Sun, 05 Oct 2014 00:49:04 GMT
Content-Type:   text/html
Content-Length: 15
Content-Encoding:   gzip
Connection: Keep-Alive

毕竟,我认为我的服务器一定有问题。像“响应不是javascript可处理的”之类的东西。我想的原因是:

实际工作的是什么:

  • 服务器可以正常使用androids httpRequest
  • 服务器可以正常使用cURL或通过浏览器直接调用

提前谢谢!

1 个答案:

答案 0 :(得分:0)

经过几天(!)的研究,我终于找到了一个非常简单的解决方案:HTTP访问控制(CORS)。

长话短说 - 下面的代码解决了这个问题。

我必须在服务器上执行以下步骤

1。)为apache激活头模块:

server# a2enmod mod_headers

2.修改VirtualHost文件&#34; myservice.conf&#34;在我的服务器上,并添加以下行。

Header set Access-Control-Allow-Origin "*"

3.)检查文件中是否有错误:

server# apachectl -t

4。)重新加载并重新启动apache

server# service apache2 reload && service apache2 restart

5.)享受服务器客户端连接!

希望我可以帮助任何有同样问题的人!!