Javascript Extjs 4上载成功功能没有响应
我有一个带有工具栏的网格,在该工具栏上添加了一个上载选项,因此上载是正常的,并且可以正常工作,但在文件上载到服务器后,成功功能没有反应 这里是我的上传代码:Javascript Extjs 4上载成功功能没有响应,javascript,node.js,extjs,Javascript,Node.js,Extjs,我有一个带有工具栏的网格,在该工具栏上添加了一个上载选项,因此上载是正常的,并且可以正常工作,但在文件上载到服务器后,成功功能没有反应 这里是我的上传代码: upload: function () { Ext.create('Ext.window.Window', { title: 'Upload', width: 300, layout: 'fit', draggable: fal
upload: function () {
Ext.create('Ext.window.Window', {
title: 'Upload',
width: 300,
layout: 'fit',
draggable: false,
resizable: false,
modal: true,
bodyPadding: 5,
items: [{
xtype: 'form',
bodyPadding: 10,
frame: true,
items: [{
xtype:'filefield',
name:'file',
fieldLabel: 'File',
buttonText: 'Select File',
labelWidth: 30,
anchor: '100%'
}, {
xtype: 'button',
text: 'Upload',
handler: function(){
var form = this.up('form').getForm();
if(form.isValid()){
form.submit({
method: 'POST',
url: 'http://localhost:3000/upload',
success: function (form, action) {
Ext.Msg.alert('Success', 'Your File has been uploaded.');
console.log(action);
},
failure : function (form,action) {
Ext.Msg.alert('Error', 'Failed to upload file.');
}
})
}
}
}]
}],
}).show();
},
});
以及服务器响应:
app.post('/upload', function(req, res) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Content-Type','application/json; charset=UTF8');
var tmp_path = req.files.file.path;
var newPath = __dirname + '/files/' + req.files.file.name;
fs.rename(tmp_path, newPath, function (err){
if (err) throw err;
});
var path = newPath;
var name = req.files.file.name;
connection.query('SELECT name FROM audio WHERE name = ?', [name] , function(err,result) {
if (result[0]) {
console.log('File already exist');
res.status(400).send(JSON.stringify());
} else {
connection.query('INSERT INTO audio (name, path) VALUES (?,?)', [name,path], function (err,result) {
if (err) throw err;
var test = {
success: true
};
res.send({success:true});
console.log('success');
});
}
});
});
如有必要,我可以提供更多的代码,提前感谢错误消息非常明确:由于跨域iframe问题,您的响应丢失 请参阅如何处理文件上载表单的说明:创建一个隐藏的iframe来接收来自服务器的响应(因为在HTML5之前,不可能使用XHR上载文件)。加载iframe时,Ext解析其内容以读取响应 但是,只有当两个iframes内容(包括端口号)位于同一域上时,页面才允许操纵其iframes内容
您很可能正在访问
http://localhost/
,当您将表单发布到http://localhost:3000
。所以禁止:错误,没有回应 这是Uberdude在Sencha论坛上发现的一个Ext js bug
问题描述:
当您使用包含要上载的文件输入的表单发出Ext.Ajax.request时,或者手动将isUpload选项设置为true,而不是执行正确的Ajax请求时,Ext会以标准HTML方式将表单提交给动态生成的隐藏表单。然后从iframe中读取json响应主体,以创建伪造的Ajax响应。如果发出上载Ajax请求的页面更改了其document.domain属性,例如home.example.com中的页面包含来自static.example.com的资源,并且希望在不违反浏览器的同源策略的情况下使用javascript对其进行操作,则会出现问题,因此这两个页面都将document.domain设置为“example.com”。如果home.example.com随后向home.example.com服务器上的url发出上传Ajax请求,则写入响应的iframe的document.domain将为“home.example.com”。因此,当home.example.com页面上Ajax.request中的ExtJS代码试图从iframe中提取文档正文时,它将被同源策略阻止,并且传递给回调函数的响应将错误地具有空responseText
解决方法:
1.发出上载请求时将document.domain传递给服务器。
2.在服务器响应中,将document.domain添加到响应文本/html中
response.setHeader('Content-Type','text/html');
response.write('document.domain=“”+params.u domain+“;”);
write(JSON.stringify({msg:'Welcome'+params.name}));
响应。结束(“”)
详细信息:
请参阅:
控制台中是否有任何错误?在firefox中,firebug是否在后端命中了该url?我什么也不知道,在chrome中,我得到了这个->阻止了一个源代码为“”的框架访问源代码为“”的框架。协议、域和端口必须匹配。我在服务器上获取文件,服务器发送json时成功:true,但仍然不工作。尝试使用return“success”而不是res.send({success:true});在backend.trued it,not work中,downvote应该评论他们认为这个答案有什么错,而不仅仅是downvote,因为这不是他们想要听到的!我认为这个答案是正确的+1