2017-09-08 12 views
0

にoperation.error取得は、アヤックスでリモートでロード:私は希望ExtJSに:私はこのExtJSの店を持っているbeforeloadストア

<?php 
echo json_encode([ 
    'success' => false, 
    'msg' => 'Some details about the error.', 
    'metaData' => ['root' => 'data', 'messageProperty' => 'msg'] 
]); 
?> 

:サーバー側で、このPHPコードとともに

Ext.create('Ext.data.Store', { 
    storeId: 'targetNamesStore', 
    fields: ['id', 'text'], 
    proxy: { type: 'ajax', url: 'test.php' }, 
    listeners: { 
     beforeload: function(store, operation) { 
      console.log(operation); 
      console.log('error: ' + operation.error); 
     } 
    } 
}); 

operationオブジェクトに含まれると思われるエラーの詳細を取得します。私はoperation.errorでそれを取得しようとする。しかし、それはundefinedです:

console output

他人operationパラメータ(すなわちsuccesslimit、...)を正しくアクセスできます。 operation['error']operation.getError()と同じことです。

私は何が起こっているのか分かりません。

答えて

0

イベントは、要求がサーバーに送信される前に呼び出されるため、エラーは操作オブジェクトでまだ使用できません。

ブラウザコンソールにログインするオブジェクトは、操作中にインプレースで変更され、ブラウザコンソールで見ると、その表示時の状態のみが表示されます。

標準のExtJSでは、データを受信して​​からストアにロードするまでにイベントが送出されません。必要があれば追加することができます。

さまざまなプロジェクトで、Ext.data.reader.Json.getResponseDataおよび/またはExt.data.reader.Json.readRecordsの機能を無効にしました。

など。一つのプロジェクトに私がメッセージボックスにサーバーから送信されたエラーメッセージの出力を追加しました:

readRecords: function(data) { 
    var me = this, 
     caption = 'Generic error', 
     message = 'The server reported an error, but did not provide any details.'; 
    if (me.getSuccessProperty()) { 
     if(!data || me.getSuccess(data)===false) { 
      if(data.Message) message = data.Message; 
      if(data.Caption) caption = data.Caption; 
      Ext.Msg.alert(caption,message); 
     } 
    } 
    return me.callParent(arguments); 
} 

をしかし、あなたはまた、すべての次のコードは、テストされていないとの保証もないです(ExtJSのとスタイルでより多くのことと思われる、以下行うことができます):

readRecords: function(data) { 
    var records = []; 
    if(this.fireEvent('beforereadrecords', this, data)!==false) records = this.callParent(arguments); 
    this.fireEvent('readrecords', this, data, records); 
    return records; 
} 

、あなたがリーダーにこれらのリスナーを追加できるようになります。

type: 'json', 
rootProperty: 'test', 
listeners: { 
    beforereadrecords: function(data) { 
     // beforereadrecords is cancelable, like all beforesomethingsomething events. 
     if(...) return false; 
    }, 
    readrecords: function(data, records) { 
     records[1].set("something", "something else") 
    } 
} 
関連する問題