我使用EXTJS上传文件并将其保存在服务器中 问题是我无法获得成功函数,甚至waitMsg始终在运行 这是守则 EXTJS代码:
var fp = new Ext.FormPanel({
fileUpload: true,
width: 500,
frame: true,
title: 'File Upload Form',
bodyStyle: 'padding: 10px 10px 0 10px;',
labelWidth: 50,
defaults: {
anchor: '95%',
allowBlank: false,
msgTarget: 'side'
},
items: [{
xtype: 'fileuploadfield',
id: 'form-file',
emptyText: 'Selectionnez un fichier',
fieldLabel: 'Fichier',
name: 'photo-path',
buttonText: 'Parcourir'
}],
buttons: [{
text: 'Ajouter',
handler: function(){
if(fp.getForm().isValid()){
var myUrl = 'php/file-upload.php?idOrganisme=' + idOrganisme + '&demarche=' + demarche;
//alert(Ext.getCmp('').);
fp.getForm().submit({
url: myUrl,
waitMsg: 'Envoi de votre fichier...',
success:function(fp,o){
alert('Sucess');
}
});
}
}
},{
text: 'Fermer',
handler: function(){
}
}]
});
PHP代码:
<?php
include("connexion.php");
$server = "http://localhost/wa";
$idOrganisme = $_GET['idOrganisme'];
$demarche = $_GET['demarche'];
$req = $bdd->query('SELECT idDemarche FROM demarche,typeDemarche WHERE
idOrganisme=' . $idOrganisme .
' AND demarche.idTypeDemarche = typeDemarche.idTypeDemarche
AND typeDemarche.typeDemarche="' . $demarche .'"');
$demarcheArray = $req->fetch();
$idDemarche = $demarcheArray['idDemarche'];
$myPath = '../uploads/_' . $idOrganisme . '_' . $idDemarche . '/';
$target_path = utf8_decode($myPath);
mkdir($target_path, 0705);
echo 'OK';
if(isset($_FILES)){
echo 'OK';
$temp_file_name = utf8_decode($_FILES['photo-path']['tmp_name']);
$original_file_name = utf8_decode($_FILES['photo-path']['name']);
// Find file extention
$ext = explode ('.', $original_file_name);
$ext = $ext [count ($ext) - 1];
// Remove the extention from the original file name
$file_name = str_replace ($ext, '', $original_file_name);
$new_name = $target_path . '[' . utf8_encode($file_name) . $ext;
chmod($new_name, 705);
if(move_uploaded_file ($temp_file_name, $new_name)) {
if($idDemarche!=''){
$length = strlen($new_name);
$path = $server . substr($new_name,2,$
$req = $bdd->prepare('INSERT INTO liens(idDemarche, lien) values(:idDemarche, :lien)');
$req->execute(array('idDemarche' => intVal($idDemarche), 'lien' => $path));
echo "OK";
}
}
else {
echo "error";
}
echo 'message';
}
?>
答案 0 :(得分:3)
有类似的问题。发现您需要在处理文件上载的页面上将内容类型设置为“text / html”。 :-(
Response.ContentType = "text/html";
如果你read the documentation for Ext.data.Connection,,你会看到
浏览器解析服务器响应以创建IFRAME的文档。如果服务器使用JSON发送返回对象,则必须将Content-Type标头设置为“text / html”,以告知浏览器将文本未更改地插入文档正文中。
我花了一段时间才发现这一点,但是当我遇到你的问题时,别人可能会遇到类似的问题!
希望这会对他们有所帮助!答案 1 :(得分:1)
您需要返回文件上传的JSON响应,在您的php代码中使用:
echo "{success: true}";
或
echo "{success: false}";
如需进一步参考,请参阅:http://dev.sencha.com/deploy/dev/docs/source/Action.html#cls-Ext.form.Action.Submit
您还可以返回自定义错误,这些错误将帮助您处理代码中使用的不同状态。