1

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

   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. 

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

4

2 回答 2

0

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

将您的更改url为简单'/test/file-upload.php?path=' + r.get('dtp'),它应该可以工作。

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

您的第二个错误来自这样一个事实,即您尝试解码不是 JSON 或 Javascript(类似于错误消息)的东西,并且Ext.decode使用eval它。

更新

您的 PHP 中有另一个错误。此行中的括号应该是卷曲的:

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

您应该使用json_encodePHP 会为您解决这个问题:

$data = array('success' => true, 'msg' => '...');
echo json_encode($data);
于 2013-09-27T07:36:00.373 回答
0

这实际上是 Extjs 中已经发现的一个 bug。

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

请参阅帖子中的解决方法

于 2014-05-29T14:44:18.813 回答