0

我有一个通过 POST 请求文件夹/文件路径的 ajax 网络画廊。它已经在我的 xp lighttpd/php 测试服务器上运行了一段时间,没有出现任何问题。

昨天我试图将它移到我的新 linux 开发服务器上,并决定尝试使用 php 内置服务器来完成这项工作,以节省我使用 confin apache 或 nginx 的麻烦。

问题是,在新服务器上,画廊不起作用(在我的生产主机服务器或运行 php -S 0.0.0.0:80 而不是 lighttpd 与以前工作的完全相同的 php.ini 的旧测试服务器上也不起作用)和我已将其缩小为:$_POST 突然完全为空,即使我可以在 php://input 中看到发布的数据。

这是 $_SERVER 的内容(运行新的 linux 服务器)

'DOCUMENT_ROOT' => '/xxx/public_html',
'REMOTE_ADDR' => 'x.x.x.x',
'REMOTE_PORT' => '54061',
'SERVER_SOFTWARE' => 'PHP 5.4.4-10 Development Server',
'SERVER_PROTOCOL' => 'HTTP/1.1',
'SERVER_NAME' => '0.0.0.0',
'SERVER_PORT' => '80',
'REQUEST_URI' => '/gustaf/photos/index.php',
'REQUEST_METHOD' => 'POST',
'SCRIPT_NAME' => '/gustaf/photos/index.php',
'SCRIPT_FILENAME' => '/xxx/public_html/gustaf/photos/index.php',
'PHP_SELF' => '/gustaf/photos/index.php',
'HTTP_HOST' => 'xxx.xxx',
'HTTP_CONNECTION' => 'keep-alive',
'HTTP_CONTENT_LENGTH' => '46',
'HTTP_CACHE_CONTROL' => 'max-age=0',
'HTTP_ORIGIN' => 'http://xxx.xxx',
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',
'HTTP_CONTENT_TYPE' => 'application/x-www-form-urlencoded',
'HTTP_ACCEPT' => '*/*',
'HTTP_REFERER' => 'http://xxx.xxx/gustaf/photos/index.php',
'HTTP_ACCEPT_ENCODING' => 'gzip,deflate,sdch',
'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.8',
'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'REQUEST_TIME_FLOAT' => 1356462787.3962,
'REQUEST_TIME' => 1356462787,

这就是 JS 位在 POST 中的样子:

    xmlhttp.open("POST","index.php",true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    //xmlhttp.setRequestHeader("Content-length", parent.path.length);
    //xmlhttp.setRequestHeader("Connection", "close"); 
    xmlhttp.send("json="+JSON.stringify({"dir":parent.path}));

我也尝试将连接设置为“关闭”,但由于某种原因,chrome 不尊重这一点,仍然将其发送为“keep-alive”。

我花了整整(圣诞节)的一天,我开始用完头发来解决这个问题。有人可以帮忙吗?

4

2 回答 2

1

您将内容类型设置为 urlencoded,但您不能确保您的帖子数据是 urlencoded。encodeURIComponent()在每个帖子值周围添加:

xmlhttp.send("json="+encodeURIComponent(JSON.stringify({"dir":parent.path})));
于 2012-12-25T19:59:13.090 回答
0

解决了!

将“接受”从“ / ”更改为“text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8”,现在它可以工作了!

于 2012-12-25T20:51:53.313 回答