添加文件后,我收到两个错误:
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.
并且所有文件上传成功(两个示例)。
答案 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中的一个错误。
请参阅帖子中的解决方法