ExtJS 3.4中上传文件提交后出错

时间:2013-09-27 06:49:10

标签: extjs

添加文件后,我收到两个错误:

   Blocked a frame with origin "http://host:8080" from accessing a frame with origin "http://host". Protocols, domains, and ports must match. ext-all.js:3922
   Uncaught SyntaxError: Unexpected token ) 

html代码:

    buttons: [{
        text: 'Save',
        handler: function(){
            if(loadfile.getForm().isValid()){
                    loadfile.getForm().submit({
                        url: 'http://host/test/file-upload.php?path='+r.get('dtp'),
                        waitMsg: 'Сохранение фотографии...',
                        success: function(loadfile, o){
                        var data = Ext.decode(o.response.responseText);
                            Ext.Msg.alert('Success', data.msg);
                        },
                        failure: function(loadfile, o){
                        var data = Ext.decode(o.response.responseText);
                            Ext.Msg.alert('Failure', data.msg);
                        }
                    });
            }
        }
    },{
        text: 'Reset',
        handler: function(){
            loadfile.getForm().reset();
        }
    }]

php代码:

     <?php
          $uploaddir = '/var/lib/tomcat6/webapps/test/upload/'.$_GET["path"];
          if (!is_dir($uploaddir))
             {
               mkdir($uploaddir, 0777);
             }
          $uploaddir.='/';
          if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$_FILES['userfile']['name']))
             {
               echo '("success": true, "msg": "Файл успешно сохранён.")';
             } else {
               echo '{"success": false, "msg": "Файл не сохранён!"}';
             }
     ?>

如果像这样设置html(没有更改php代码):

                        success: function(loadfile, o){
                            Ext.Msg.alert('Success', 'Success upload file');
                        },
                        failure: function(loadfile, o){
                            Ext.Msg.alert('Failure', 'Failure upload file');
                        }

我只收到一个错误:

        Blocked a frame with origin "http://host:8080" from accessing a frame with origin "http://host". Protocols, domains, and ports must match. 

并且所有文件上传成功(两个示例)。

2 个答案:

答案 0 :(得分:0)

错误消息说明了这一切,您正在制作禁止的跨域请求。 “协议,域和端口必须匹配。”因此,host:8080被视为与host不同的域。

将您的url更改为'/test/file-upload.php?path=' + r.get('dtp'),它应该有效。

有关更多信息和其他可能的解决方案,请参阅this question

您的第二个错误来自于您尝试解码非JSON,Javascript(类似错误消息)以及Ext.decode使用eval的事实。

<强>更新

你的PHP中还有另一个错误。括号在这一行应该是卷曲的:

echo '("success": true, "msg": "Файл успешно сохранён.")';

您应该使用json_encode,PHP将为您解决此问题:

$data = array('success' => true, 'msg' => '...');
echo json_encode($data);

答案 1 :(得分:0)

这实际上是已经识别的Extjs中的一个错误。

http://www.sencha.com/forum/showthread.php?136092-Response-lost-from-upload-Ajax-request-to-iframe-if-document.domain-changed

请参阅帖子中的解决方法