Javascript isUpload为true时从不调用Ext.Ajax.request回调
我使用ExtJS生成一个表单,该表单以CSV格式从数据库中的数据生成报告。用户选择一个简单的日期范围提取数据并提交后,运行以下代码:Javascript isUpload为true时从不调用Ext.Ajax.request回调,javascript,ajax,extjs,Javascript,Ajax,Extjs,我使用ExtJS生成一个表单,该表单以CSV格式从数据库中的数据生成报告。用户选择一个简单的日期范围提取数据并提交后,运行以下代码: var frm = document.createElement('form'); frm.id = 'frmDummy'; frm.name = id; document.body.appendChild(frm); Ext.MessageBox.wait('Generating CSV File ...'); Ext.Ajax.request({
var frm = document.createElement('form');
frm.id = 'frmDummy';
frm.name = id;
document.body.appendChild(frm);
Ext.MessageBox.wait('Generating CSV File ...');
Ext.Ajax.request({
url: 'csv_extract_ajax.php?start_time='+txtDateFieldFrom.getRawValue()+'&end_time='+txtDateFieldTo.getRawValue(),
method : 'POST',
form: Ext.fly('frmDummy'),
isUpload: true,
success: function(o, r, n){
Ext.MessageBox.updateProgress(1);
Ext.MessageBox.hide();
},
failure: function(o, r, n){
Ext.MessageBox.updateProgress(1);
Ext.MessageBox.hide();
},
callback: function(o, r, n){
Ext.MessageBox.updateProgress(1);
Ext.MessageBox.hide();
},
scope: this
});
关联的php文件simple输出一个CSV字符串,即工作文件
因为isUpload是true,所以回调似乎永远不会返回给用户。我一删除它,就会调用回调,但文件不会上载到客户端
现在的问题是,一切都很正常,但MessageBox从未消失,因为从未调用回调(成功、失败或回调)
有什么想法吗P
其他信息:
PHP标题:
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: private");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$filename");
header("Accept-Ranges: bytes");
您是在每个浏览器中都注意到了这一点,还是只在特定的浏览器中注意到了这一点 Firefox 3.5(安装了Firebug)似乎具有这一特性,这意味着readystatechange不会得到更新,这意味着回调不会被调用。尝试更改: l:'csv_extract_ajax.php?start_time='+txtDateFieldFrom.getRawValue()+'&end_time='+txtDateFieldTo.getRawValue() 到
l:'csv_extract_ajax.php?'+Ext.urlEncode({start_time:txtDateFieldFrom.getRawValue(),end_time:txtDateFieldTo.getRawValue()}),页面中是否显示任何错误 响应的内容类型是什么? ExtJSAPI文档说它应该设置为“text/html” 如果它仍然不工作,您可以尝试在doFormUpload()中设置断点。此方法出现在connection.js中。在其中,您可以找到一个名为cb()的内部方法,一旦服务器返回,就会调用该方法。您可以从那里开始调试 祝你一切顺利 一旦我删除它,回调 调用,但未上载文件 给客户
将
isUpload
设置为true意味着您要将文件从客户端上载到服务器,但恐怕这不是您的情况 如果您没有要上载的文件,为什么要将isUpload设置为true
另外,如果您将数据发布到PHP脚本,并且该脚本返回CSV字符串,那么为什么要尝试将其作为附件发送?为什么不将其作为常规响应文本发送?这是从
Ext.Ajax.请求文件中摘录的内容:
isUpload:Boolean(可选)如果为True
表单对象是一个文件上载(将
通常会自动检测到)。
文件上载不使用执行
正常的“Ajax”技术,也就是说
不使用
XMLHttpRequests。相反,表格是
以标准方式提交
暂时删除DOM元素
修改为将其目标设置为
指动态生成的,
隐藏,插入到
文档,但在
已收集返回数据。这个
服务器响应由
使用浏览器为文档创建文档
IFRAME。如果服务器正在使用JSON来
发送返回对象,然后发送
内容类型标题必须设置为
“text/html”以告知
在浏览器中插入未更改的文本
进入文档体。反应
从文档中检索文本,
一个假的XMLHttpRequest对象是
已创建包含responseText的
属性,以符合
事件处理程序和
回调。请注意,文件上载
数据包以内容类型发送
多部分/表单和一些服务器
技术(尤其是JavaEE)可能需要
一些自定义处理,以便
检索参数名称和参数
数据包内容中的值
正如您所见,上传请求是通过IFRAME返回的,并且只模拟标准的AJAX响应,因此不会调用回调。我用Chrome尝试过同样的方法,所以不是这样。无论如何,谢谢:)PHP没有问题,isUpload似乎会终止回调。我也试过同样的方法。无论如何谢谢:)没有错。。。我会继续调查的,谢谢你的帮助+1.