Як атрымаць responsecode ад крамы зваротнага выкліку?

I'm trying to handle session timeout server-side. When getting session timeout, my server sends back a response with json {success: false}, ContentType: 'application/json', ResponseNo: 408

краму:

var storeAssets = Ext.create('Ext.data.Store', {
  model : 'modCombo',
  autoLoad : false,
  proxy : { limitParam : undefined,
    startParam : undefined,
    paramName : undefined,
    pageParam : undefined,
    noCache : false,
    type : 'ajax',
    url : '/caricaAssets.json',
    reader : { root : 'data' }
  }
});

А на баку кліента, я апрацоўваць зваротны выклік загрузку крамы, як гэта:

storeAssets.load({
  scope: this,
  callback: function(records, operation, success) {
    if (!success) { Ext.Msg.alert('Error'); }
  }
});

Для выканання розных адказаў, я хацеў бы змяніць папярэджанне. Такім чынам, калі адказ няма. з'яўляецца 408 , я магу папярэдзіць сесіі скончыўся (і гэтак далей, кіруючы лік адказаў).

Але я не знайшоў спосаб атрымаць адказ няма. у краме зваротнага выкліку!

Любыя прапановы?

4
Так, вы правільна, я выдаліў свой адказ, і галасаваў ваша пытанне ..
дададзена аўтар Amit Aviv, крыніца

10 адказы

На жаль, метад зваротнага выкліку не мае адказу сервера, перададзены ў якасці параметру. Гэта, верагодна, так як існуе шмат спосабаў загрузкі дадзеных у сховішча, і не ўсе з іх будуць мець адказ сервера.

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

Ext.define('Ext.data.proxy.ServerOverride', {
   override: 'Ext.data.proxy.Server',

   processResponse: function (success, operation, request, response, callback, scope) {
      operation.serverResponse = response;
      this.callParent(arguments);
   }
});

Затым, каб атрымаць статус:

storeAssets.load({
   scope: this,
   callback: function(records, operation, success) {
      if (operation.serverResponse.status === 408) {
         Ext.Msg.alert('Session expired');
      }
   }
});
4
дададзена

На жаль, метад зваротнага выкліку не мае адказу сервера, перададзены ў якасці параметру. Гэта, верагодна, так як існуе шмат спосабаў загрузкі дадзеных у сховішча, і не ўсе з іх будуць мець адказ сервера.

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

Ext.define('Ext.data.proxy.ServerOverride', {
   override: 'Ext.data.proxy.Server',

   processResponse: function (success, operation, request, response, callback, scope) {
      operation.serverResponse = response;
      this.callParent(arguments);
   }
});

Затым, каб атрымаць статус:

storeAssets.load({
   scope: this,
   callback: function(records, operation, success) {
      if (operation.serverResponse.status === 408) {
         Ext.Msg.alert('Session expired');
      }
   }
});
4
дададзена

Я ведаю, што гэта даволі старая, але я была аналагічная праблема. Рашэнне, якое я знайшоў у тым, каб праслухоўваць падзея выключэння ў проксі-сэрвэры.

proxy{
    type: 'ajax',
    reader: {
        type: 'json'
    ,
    listeners: {
        exception: function(proxy, response, options){
            Ext.MessageBox.alert('Error', response.status + ": " + response.statusText); 
        }
    }
}

Я таксама грунтуецца мой магазін нагрузкі зваротнага выкліку толькі працягнуць, калі поспех дакладна. Спадзяюся, хто-то пошук знойдзе гэта карысным.

3
дададзена

Я ведаю, што гэта даволі старая, але я была аналагічная праблема. Рашэнне, якое я знайшоў у тым, каб праслухоўваць падзея выключэння ў проксі-сэрвэры.

proxy{
    type: 'ajax',
    reader: {
        type: 'json'
    ,
    listeners: {
        exception: function(proxy, response, options){
            Ext.MessageBox.alert('Error', response.status + ": " + response.statusText); 
        }
    }
}

Я таксама грунтуецца мой магазін нагрузкі зваротнага выкліку толькі працягнуць, калі поспех дакладна. Спадзяюся, хто-то пошук знойдзе гэта карысным.

3
дададзена

Паспрабуйце гэта (на ExtJS 4.2.2)

callback: function (records, operation, success) {
            operation.request.operation.response.status; }
1
дададзена

Паспрабуйце гэта (на ExtJS 4.2.2)

callback: function (records, operation, success) {
            operation.request.operation.response.status; }
1
дададзена

Якія вырашаюцца пры даданні наступнага коду:

Ext.Ajax.on('requestexception', function(con, resp, op, e){
  if (resp.status === 408) {
    Ext.Msg.alert('Warning', 'Session expired');
  } else {
    if (resp.status === 404) {
      Ext.Msg.alert('Error', Ext.util.Format.htmlEncode('Server not ready'));
    } else {
      if (resp.status !== undefined) {
            Ext.Msg.alert('Error', Ext.util.Format.htmlEncode('Server not found (') + resp.status + ')');
      } else {
            Ext.Msg.alert('Error', 'Server not found');
          }
        }
      }
});

Калі я называю запыт Ajax, сервер вяртае інфармацыю, якія зловяць гэтым выключэннем. Цяпер я магу апрацоўваць код зваротнага выкліку!

0
дададзена

Якія вырашаюцца пры даданні наступнага коду:

Ext.Ajax.on('requestexception', function(con, resp, op, e){
  if (resp.status === 408) {
    Ext.Msg.alert('Warning', 'Session expired');
  } else {
    if (resp.status === 404) {
      Ext.Msg.alert('Error', Ext.util.Format.htmlEncode('Server not ready'));
    } else {
      if (resp.status !== undefined) {
            Ext.Msg.alert('Error', Ext.util.Format.htmlEncode('Server not found (') + resp.status + ')');
      } else {
            Ext.Msg.alert('Error', 'Server not found');
          }
        }
      }
});

Калі я называю запыт Ajax, сервер вяртае інфармацыю, якія зловяць гэтым выключэннем. Цяпер я магу апрацоўваць код зваротнага выкліку!

0
дададзена

Я ведаю, што гэтае пытанне з'яўляецца даволі «старым», але ў ExtJS 4.2.2, калі

callback: function(a,b,c) {}

здараецца, вы можаце аўтаматычна злавіць адказ сервера з дапамогай

<�Б> b.error.status

if (!c) {
    if (b.error.status === 401) {
        //logout
    }
}

Я не ведаю, калі гэта было рэалізавана толькі некалькі гадоў назад (пасля гэтага было вывешана я маю на ўвазе), але ўсё ж ён можа дапамагчы любому праверцы гэтай пасады ў будучыні я думаю ...

0
дададзена

Я ведаю, што гэтае пытанне з'яўляецца даволі «старым», але ў ExtJS 4.2.2, калі

callback: function(a,b,c) {}

здараецца, вы можаце аўтаматычна злавіць адказ сервера з дапамогай

<�Б> b.error.status

if (!c) {
    if (b.error.status === 401) {
        //logout
    }
}

Я не ведаю, калі гэта было рэалізавана толькі некалькі гадоў назад (пасля гэтага было вывешана я маю на ўвазе), але ўсё ж ён можа дапамагчы любому праверцы гэтай пасады ў будучыні я думаю ...

0
дададзена