拥有一组支持原型(prototype)的ajax代码,可以在除IE之外的所有浏览器中运行。在 IE8 中,JSON(否则会返回到 Ajax.Request 中指定的 onSuccess 处理函数)会被扔到文件下载流中,该流会弹出并提示下载位置。
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函数时出现下载提示。
文件名IE8每次都会提示下载更改,4个看似随机的十六进制值(8个字符),没有文件扩展名。文件的内容是来自服务器的纯 JSON 响应...
{"question": ["Enter your question*"], "name": ["Enter your name (First L.)*"], "sender": ["Enter your e-mail*"]}
非常感谢这里的任何提示。这种情况发生在雪豹上,在 VMWare Fusion 中运行 IE8,访问 OS X 上通过 apache/django/python 运行的站点。但是,由于 VMWare Windows XP 计算机中的 Chrome 和 Firefox 运行正常,似乎直接指出 IE8 是罪魁祸首。
最佳答案
这个问题已经解决了。这里的问题很疯狂,但事实证明,存在一个 javascript 错误,导致脚本无法执行,并且标准表单提交是通过浏览器发生的,从而返回 AJAX 代码作为文件下载提示。该表单的设计方式使得禁用 javascript 的浏览器仍然能够使用名为“js”的隐藏输入字段而无需使用 ajax 的表单。通过 AJAX 提交时,JavaScript 会将此字段的值留空,让服务器知道响应应该是 JSON,而不是整个页面刷新。好吧,javascript 中清空 js 字段值的部分正常处理,但随后脚本出错,因此 event.stop() javascript 从未执行。导致表单被处理为标准的“提交”按钮单击、通过浏览器的 POST 请求。
上面代码中的注意事项...
askForm = $('askForm');
这显然应该是......
var askForm = $('askForm');
感谢允许此语法的浏览器,但结果却让我陷入了 IE8 的白费力气。永远学习。
关于python - Internet Explorer 8 中提示文件下载时原型(prototype) Ajax.Request 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956287/