2

コードに問題があります。ExtJSとCodeigniterを使用してアップロードファイルフォームを作成しようとしています。

これが私のコードです、

 Ext.require([
    'Ext.form.field.File',
    'Ext.form.Panel',
    'Ext.window.MessageBox'
]);

Ext.onReady(function(){

    Ext.create('Ext.form.Panel', {
        title: 'Upload a Photo',
        width: 400,
        bodyPadding: 10,
        frame: true,
        renderTo: Ext.getBody(),
        items: [{
            xtype: 'filefield',
            name: 'photo',
            fieldLabel: 'Photo',
            labelWidth: 50,
            msgTarget: 'side',
            allowBlank: false,
            anchor: '100%',
            buttonText: 'Select Photo...'
        }],

        buttons: [{
            text: 'Upload',
            handler: function() {
                var form = this.up('form').getForm();
                if(form.isValid()){
                    form.submit({
                        url: '../upload',
                        waitMsg: 'Uploading your photo...',
                        success: function(fp, o) {
                            Ext.Msg.alert('Success', 'Your photo "' + o.result.file + '" has been uploaded.');
                            Ext.Ajax.request({
                                url: o.data.url,
                                method: "GET",
                                success: function(response, request) {
                                    // do whatever you need to with the generated HTML
                                    alert(response.responseText);
                                },
                                failure: function(response, request) {
                                    alert('failed');
                                }
                            });
                        }
                    });
                }
            }
        }]
    });

});

しかし、コンソール出力に「Uncaught Ext.JSON.decode():無効なJSON文字列をデコードしようとしています」のようなエラーが表示されます。それで、誰かが同じ問題を抱えているか、この問題を解決していたなら、教えてください。

ありがとう!!!

結論: なるほど..実際、私はフレームワークとしてCodeigniterを使用しています。このURLにjsonを返すと、この問題は解決します。

url: '../upload',
waitMsg: 'Uploading your photo...',
success: function(fp, o) {
Ext.Msg.alert('Success', 'Your photo "' + o.result.file + '" has been uploaded.');
Ext.Ajax.request({
   url: o.data.url,
   method: "GET",
   success: function(response, request) {
      // do whatever you need to with the generated HTML
      alert(response.responseText);
   },
   failure: function(response, request) {
      alert('failed');
   }
   });

そこで、このようにコントローラーを作成します(サンプルとして)。

public function upload(){
        echo json_encode(1);
    }

そして私のコードのエラー結果はもうありません..Bronchaに感謝します!!

4

5 に答える 5

1

AJAX 応答は純粋な JSON ではありません。responseコンソールに出力してみる

success: function(response, request) {
  // do whatever you need to with the generated HTML
  console.log(response);
},

応答が純粋な JSON であるかどうかを確認します

于 2012-12-04T10:42:26.210 に答える
0

私の問題は同じで、Google で検索しただけで、この問題の解決策を知っている URL 解決策はこちら

これは、Sencha Free と Purchase の違いだと思います。フォームのすべてのテキスト フィールドへの JSON オブジェクト マッピングを取得するために使用する場合Form.load(...)、json 文字列を正しく記述するだけでなく、次の形式を維持することもできます。

{success:true,data:{... json string object ...}}
于 2013-01-08T07:34:45.923 に答える