Ext JSフォームを使用してファイルをアップロードしようとしていますが、成功または失敗した場合は、適切なメッセージを表示します。しかし、私は望ましい結果を得ることができません。 success
またはfailure
コールバックをform.submit
アクションで機能させることができません。
私が今までやってきたことは:
このスクリプトを使用してフォームを作成します。
new Ext.FormPanel({
fileUpload: true,
frame: true,
url: '/profiler/certificate/update',
success: function() {
console.log(arguments);
},
failure: function() {
console.log(arguments);
}
}).getForm().submit()
/*
The response Content-Type is text/html (with charcode=utf8);
The response JSON is: { "success": true }
*/
この回答 に基づいて応答Content-Type
をtext/html
に設定します。
Ext JS docs に基づいて、適切なJSON結果を送り返します。 Fiddlerを介してキャプチャされた応答は次のとおりです。
{"success":false}
または
{"success":true}
応答のContent-Typeをapplication/json
に設定しました。しかし、それでも成功しません。
this や this のようなリンクを読んだことがありますが、どれも役に立ちませんでした。また、アップロードフィールドと保存ボタンを含むフォームを作成する別のスクリプトを試し、保存ボタンのハンドラーでフォームを送信したことに注意してください。しかし、それでもコールバックは発生しません。
これが実際の例です-Javascriptコード:
Ext.onReady(function () {
Ext.define('ImagePanel', {
extend: 'Ext.form.Panel',
fileUpload: true,
title: 'Upload Panel',
width: 300,
height: 100,
onUpload: function () {
this.getForm().submit({
url: 'upload.php',
scope: this,
success: function (formPanel, action) {
var data = Ext.decode(action.response.responseText);
alert("Success: " + data.msg);
},
failure: function (formPanel, action) {
var data = Ext.decode(action.response.responseText);
alert("Failure: " + data.msg);
}
});
},
initComponent: function () {
var config = {
items: [
{
xtype: 'fileuploadfield',
buttonText: 'Upload',
name: 'uploadedFile',
listeners: {
'change': {
scope: this,
fn: function (field, e) {
this.onUpload();
}
}
}
}
]
};
Ext.apply(this, Ext.apply(this.initialConfig, config));
this.callParent(arguments);
}
});
var panel = Ext.create('ImagePanel', {
renderTo: Ext.getBody()
});
});
そしてPHPコード:
<?php
if (isset($_FILES)) {
$temp_file_name = $_FILES['uploadedFile']['tmp_name'];
$original_file_name = $_FILES['uploadedFile']['name'];
echo '{"success": true, "msg": "'.$original_file_name.'"}';
} else {
echo '{"success": false, "msg": "No Files"}';
}
私もかなり前からこれに苦労しています。これが私のコードです:
Ext.getCmp('media-upload-form').getForm().doAction('submit', {
url: './services/recordmedia/upload',
method: 'post',
waitMsg: 'Please wait...',
params: {
entityId: this.entityId,
},
failure: function(form, action){
alert(_('Error uploading file'));
this.fireEvent('file-upload');
this.close();
},
success: function(form, action){
this.fireEvent('file-upload');
this.close();
},
scope: this
})
応答は常にブラウザによって<pre>タグでラップされていたため、Extjlibはコールバックを呼び出さなかった。これを修正するには: