2013-12-17 2 views
5

Я хочу получить персонализированное сообщение об ошибке при попытке загрузить хранилище, а также время подключения или DB, которое недоступно ... когда я делаю запрос Ajax, очень легко, потому что я получаю " ответ»в качестве параметра либо в успехе или неудаче ...Проверка правильности обработки обратного вызова ExstJs

Ext.Ajax.request({ 
    url: 'ajax_demo/sample.json', 
    success: function(response, opts) { 
     var obj = Ext.decode(response.responseText); 
     console.dir(obj); 
    }, 
    failure: function(response, opts) { 
     console.log('server-side failure with status code ' + response.status); 
    } 
}); 

но я столкнулся с проблемами, чтобы сделать то же самое при попытке загрузить в магазин, я определил функцию обратного вызова, но я только получить записи, эксплуатации и успеха.

store.load({ 
     callback : function(records, options, success) { 
      if (!success) { 

       // what can I do here to show personalized error sent from server 
      } 
     } 
    }); 

Итак, что такое правильный способ справиться ответ, как это, чтобы показать его пользователю?

{"success": false, "msg": "SomeExceptionFromServer"} 

С наилучшими пожеланиями

+0

Hummm уже спрашивали http://stackoverflow.com/questions/16694012/how-to-get-responsecode- from-store-callback, хотя любые другие идеи? –

+0

В чем проблема? Почему бы не обработать ваш ответ json на основе флага 'success'? – Patrick

+0

Я делаю это, но хочу отобразить исключение, отправленное с сервера, где я могу это получить? –

ответ

3

Когда успех ложное срабатывание не получает свойство ответа вместо этого он получает метод GetError, но вы должны определить messageProperty в proxyReader для того, чтобы работать.

Пример:

Ext.define("SC.store.SegurosCancelacionStore", { 
    extend: "Ext.data.Store", 
    model: "SC.model.PersonaSeguro", 
    proxy: { 
     timeout: 90000, 
     actionMethods: { 
      read : 'POST' 
     }, 
     type: "ajax", 
     url: "../SegurosFinsolCancelacionServlet", 
     reader: { 
      type: "json", 
      root: "seguros", 
      messageProperty : 'msjError' //without this, it doesn't work 
     } 
    }, 
    autoLoad: false 
}); 

Реализация:

storeSegurosCancelacion.load({ 
       params: { 
        'sucursal':sucursal, 
        'persona': persona 
       }, 
       callback:function(records, operation, success){ 
        msg.hide(); 
        if(success == true){ 
         if(records.length == 0){ 
         Ext.Msg.alert('Resultado', 'No se ha encontrado información'); 
         } 
        } 
        if(success == false){ 
         try{ 
          Ext.Msg.alert('Error', operation.getError()); // way more elegant than ussing rawData etc ... 
         }catch(e){ 
           Ext.Msg.alert('Error', 'Error inesperado en el servidor.'); 
         } 
        } 
       } 
      }); 

С наилучшими пожеланиями

+0

. В Sencha есть замечательная нить, но я не мог найти его сейчас, но я буду продолжать искать его. –

+0

вот он http://www.sencha.com/forum/showthread.php?196013-access-operation.response-when-success-false –

-1

Если есть ошибка, которую вы хотите отправить, то почему бы не передать пустую data свойство наряду с сообщением об ошибке? Таким образом, для загрузки нет записей, но вы получаете сообщение.

{ 
    "success": false, 
    "msg": "SomeExceptionFromServer", 
    "data": {} 
} 

Вы, возможно, придется изменить data к вашему имени свойства данных.

+0

Как? Можете ли вы показать код? –

+0

Хорошо, можете ли вы опубликовать успешный ответ json с сервера? – Patrick

+0

Что не так с этой попыткой? – Patrick

0
store.load({ 
     callback : function(records, operation, success) { 

       console.log(operation.getResponse().msg);//this does the trick    

     } 
    }); 
+0

привет, я пытался получить это, когда успех был ложным, однако по какой-то причине моя ошибка говорит undefined. Я использую extjs 4.2, любые идеи? –

+0

Проверьте мой новый ответ –

+1

Это сработало для Sencha Touch, но не для ExtJs –

Смежные вопросы