我有一个页面本身可以正常工作的问题,但是当它嵌入到公司网页的 iFrame 中(我无法控制)时,它会在 IE9(但不是 IE8)中阻塞。
该页面使用 jQuery 进行 AJAX 调用,并使用 KnockoutJS 绑定内容以进行显示。该页面将 GET 请求中的参数传递给我的服务器,并使用 AJAX 进行响应,并且似乎在从服务器获取数据时阻塞。但是,当执行此代码时,数据正确且格式正确:
$.ajax({
url: this.serviceURL + parameters,
dataType: 'json',
success: callback,
timeout: 3000,
error: function (jqXHR, status, errorThrown) {
if (status == "timeout") {
error("The connection to the server timed out.\nEither the server is down or the network is slow.\nPlease try again later.");
}
else {
error("An error occurred while trying to communicate with the server.\n " + errorThrown);
}
}
});
在 IE9 中,我总是使用“SyntaxError: Invalid character”的 errorThrown 来点击“An error occurred...”分支,但它什么也没告诉我。
有人对如何调试此问题有任何建议吗?我使用 Fiddler 查看服务器发送和返回的内容,并且一切看起来都很好。
更新:在上面睡了一会儿之后,我今天开始焕然一新。我确定的是,由于某种原因,当我的页面是 iFramed 时,而不是获取 JSON 响应:
"{"Foo":true,"Bar":true}"
我实际上得到(从强制错误处理程序中的错误,以便我可以检查 jqXHR.responseText 的状态)是:
" {"Foo":true,"Bar":true}"
如果使用控制台尝试输入 JSON.parse,则会出现错误。所以问题是,这个领先的空间到底是从哪里来的?如果我在 Firefox 中运行它,我会看到来自服务器的正确响应(没有空格),如果我在 iFrame 之外运行它,我看不到前导空格。所以我认为它不会出现在服务器端。在父页面和我的页面上运行的 JS 混乱中的某个地方,它插入了一个前导空格。
更新 2:仔细检查发现 jqXHR.responseText.charCodeAt(0) 是 65279,所以它实际上不是一个空格(尽管它显示为一个)它是字节顺序标记。但是为什么它现在(而不是之前)在那里,为什么它会引起问题?