Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Extjs 4上载成功功能没有响应_Javascript_Node.js_Extjs - Fatal编程技术网

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