有一组支持原型的ajax代码,可以在IE以外的所有浏览器中运行。在IE8中,原本返回到Ajax.Request中指定的onSuccess处理函数的JSON被抛出到一个文件下载流中,该流弹出并提示下载位置。
askForm = $('askForm');
var askUrl = '.';
var askParameters = askForm.serialize(true);
askForm.disable();
var askAjax = new Ajax.Request(
askUrl, {
method: 'post',
parameters: askParameters,
onSuccess: handleResults,
onFailure: handleError
}
);
function handleError(transport) {
alert('Please refresh this page, an error occurred in processing at the server.');
}
function handleResults(transport) {
...
}handleResults函数中有更多代码,但它从未被调用过。调试完成后,在调用Ajax.Request函数时会出现下载提示。
filename IE8每次都会提示下载更改,4个看似随机的十六进制值(8个字符),没有文件扩展名。文件的内容是来自服务器的纯JSON响应...
{"question": ["Enter your question*"], "name": ["Enter your name (First L.)*"], "sender": ["Enter your e-mail*"]}将非常感谢这里的任何提示。这在雪豹上发生,在VMWare融合中运行的IE8访问通过apache/django/ VMWare在OS X上运行的站点。但是,由于VMWare Windows XP机器中的Chrome和Firefox功能正常,似乎直接指向IE8作为罪魁祸首。
发布于 2010-10-19 04:57:13
这个问题已经解决了。这里有一个疯狂的问题,但事实证明,有一个javascript错误阻止了脚本的执行,并且标准表单提交通过浏览器发生,从而以文件下载提示的形式返回AJAX代码。表单的设计方式是,禁用javascript的浏览器仍然可以使用名为"js“的隐藏输入字段,而无需使用ajax。当通过AJAX提交时,javascript会将这个字段的值留空,让服务器知道响应应该是JSON,而不是整个页面刷新。javascript中清除js字段值的部分正常处理,但随后脚本出错,因此event.stop() javascript永远不会执行。导致表单被处理为通过浏览器的标准提交按钮点击、POST请求。
注意在上面的代码中...
askForm = $('askForm');显然应该是..。
var askForm = $('askForm');多亏了允许这种语法的浏览器,但结果却让我对IE8如履薄冰。总是在学习。
发布于 2010-10-18 10:55:20
将JSON发送到浏览器的服务器端文件是否发送了正确的标头?如果它没有将自己标识为JSON,浏览器可能会认为它是一个要下载的文件。
https://stackoverflow.com/questions/3956287
复制相似问题