为什么Ajax脚本不能在本地工作?

时间:2020-03-06 14:27:57  来源:igfitidea点击:

我遇到了一个问题,即同一段代码在我的实时网站上运行良好,但在本地开发服务器上却无法正常运行。

我有一个更新div的Ajax函数。以下代码可用于实时站点:

self.xmlHttpReq.open("POST", PageURL, true);
self.xmlHttpReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
self.xmlHttpReq.setRequestHeader("Content-length", QueryString.length);
//..update div stuff...
self.xmlHttpReq.send(QueryString);

当我尝试在本地计算机上运行此命令时,没有任何内容传递给QueryString。

但是,令人困惑的是,以下代码在本地运行:

self.xmlHttpReq.open("POST", PageURL+"?"+QueryString, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
//..div update stuff..
self.xmlHttpReq.send(QueryString);

但是,我无法使用可在本地计算机上运行的代码,因为它无法在实时服务器上运行(出于安全原因,他们已更改了对查询字符串的策略)!

我可以将Querystring发出警报,以便知道它已传递到本地计算机的函数中。我唯一能想到的是这是硬件/更新问题。

Live Site正在运行IIS 6(我认为是在WIN 2003机器上)

本地站点正在运行IIS 5.1(在XP Pro上)

是否有一些更新或者我缺少的东西?

解决方案

我们是否有理由在第一个示例中明确设置" Content-Length"标头?我们...不需要这样做,而且我发现它会引起问题也不会感到惊讶。

哦,请检查编码例程。对于查询字符串和POST表单数据,规则并不完全相同。

我猜想Shog9是正确的,并且IIS 6我足够聪明,可以忽略请求并发送正确的标头,而5.2会引发错误。