Internet Explorer 8中的原型Ajax.Request问题提示文件下载

时间:2010-10-18 02:36:14

标签: python ajax django internet-explorer-8 prototypejs

拥有一组支持原型的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*"]}

这里有任何提示。这种情况发生在Snow Leopard上,IE8在VMWare Fusion中运行,在OS X上访问通过apache / django / python运行的站点。但是,由于VMWare Windows XP机器中的Chrome和Firefox功能正常,似乎直接指向IE8作为罪魁祸首。

2 个答案:

答案 0 :(得分:3)

这个问题已经解决了。疯狂的问题,但事实证明,有一个javascript错误阻止脚本执行,标准表单提交通过浏览器发生,从而返回AJAX代码作为文件下载提示。该表单的设计方式使得禁用javascript的浏览器仍然可以使用名称为“js”的隐藏输入字段而不使用ajax的表单。当通过AJAX提交时,javascript将空白该字段的值,让服务器知道响应应该是JSON而不是整页刷新。好吧,那个空白js字段值的javascript部分正常处理但后来脚本出错了,因此event.stop()javascript从未执行过。导致表单被处理为标准的提交按钮单击,通过浏览器发出POST请求。

请注意以上代码......

askForm = $('askForm');

显然应该......

var askForm = $('askForm');

感谢允许这种语法的浏览器,但结果却让我发了一个IE8狂野追逐​​。一直在学习。

答案 1 :(得分:0)

将JSON发送到浏览器的服务器端文件是否发送了正确的标头?如果它不将自己标识为JSON,则浏览器可能会将其视为要下载的文件。