【发布时间】:2010-06-09 00:27:37
【问题描述】:
我在这里遇到了一个奇怪的问题。我有代码使 jquery ajax 调用 Web 服务并使用 jquery 动态添加控件。在我运行 IIS 5.1 的开发机器上一切正常,但在部署到 IIS 6 时却不行。我使用的是 VS2010/ASP.Net 4.0、C#、jQuery 1.4.2 和 jQuery UI 1.8.1。我为每个人使用相同的浏览器。
它部分虽然有效。代码会将控件添加到页面,但在我单击它们之前它们不可见(尽管它们不可见)。我认为这是一个 CSS 问题,但样式也在那里。
ajax 调用如下所示:
$.ajax({
url: "/WebServices/AssetManager.asmx/Assets",
type: "POST",
datatype: "json",
async: false,
data: "{'q':'" + req.term + "', 'type':'Condition'}",
contentType: "application/json; charset=utf-8",
success: function (data)
{
res($.map(data.d, function (item)
{
return {
label: item.Name,
value: item.Name,
id: item.Id,
datatype: item.DataType
}
}))
}
})
更改内容类型会使自动完成失败。我已经检查了四次,所有路径都正确,IIS 中没有启用文档页脚,而且我没有使用 IIS 压缩。
知道为什么页面会在 IIS 5 中正常显示和工作,但在 IIS 6 中只能部分显示和工作吗? (如果它完全失败,那就更有意义了!)。是 jQuery 还是 CSS 问题?
编辑:我正在使用“contentType:”application/json;“charset=utf-8”我复制了一个包含 application/javascript 的测试调用。
@Gaby:我很清楚服务器与 CSS 或 javascript 无关这一事实,但是,这是有效和无效的代码之间的唯一区别。
我的本地开发机器 (IIS 5) 和服务器 (iis 6) 之间的所有 jquery/css 文件都是相同的。
@jaymz:我会试试 fiddler 看看是否有区别。我正在使用 IE8,但它不会进入兼容模式。
解决方案:(兼容模式!) 在 Fiddler 中检查了所有内容并没有发现任何差异后,我在 Firefox 中尝试了它,它在那里工作。让我开始思考,果然,我错了,IE 正在进入兼容模式。显然默认情况下它会在内网上使用兼容模式,而不是 localhost(恰好是不同版本的 IIS)。我尝试了 IE7 并得到了同样的结果。我需要更改我的代码以确保它也适用于 IE7。
【问题讨论】:
-
CSS 与服务器技术无关 .. 仅与浏览器支持有关。 Javascript 也与服务器无关,只与浏览器打交道。您是否使用任何 URL 重写过滤器?并确保 CSS 和 JS 都被传递到浏览器!
-
你有没有试过用firebug来检查每次服务器返回的内容?我想这应该是字符编码问题;您正在指示服务器使用 utf-8,可能您的 IIS6 上没有正确的设置来正确处理 utf-8,并且它要么不理解通过
post接收的输入,要么无法发送正确编码为 utf 的结果-8,并且您的浏览器不理解它接收到的内容。