Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Обновление грида (https://javascript.ru/forum/extjs/8672-obnovlenie-grida.html)

WalterScott 08.04.2010 10:34

Обновление грида
 
Что-то не соображу, как мне перерисовать грид при добавлении или удалении строки.
Ну, у хендлера кнопки, которая выполняет действие есть функция success, в которой по значению флага success в ответе сервера я могу определить, что запрос действительно успешный. А как сам грид перерисовать?

WalterScott 08.04.2010 10:55

В Firefox работает store.reload(), где store хранилище.
Не работает в IE8 и Опере9. По-моему, впервые в ExtJS столкнулся с чем-то, работающим не кроссбраузерно.

WalterScott 13.04.2010 11:45

Оказывается ошибку вызывает не reload().
Заменил store.reload() на location.href, чтобы просто перезагрузить страницу вместо обновления грида и оказалось, что ошибка происходит раньше. Но после отправки данных серверу, запрос к базе нормально отрабатывает.
Консоль ошибок в Опере вот что выдаёт:
Цитата:

Error:
name: SyntaxError
message: Statement on line 12242: Syntax error
Backtrace:
Line 12242 of linked script http://localhost/ext/scripts/ext/ext-all-debug.js
return eval("(" + json + ')');
Line 12380 of linked script http://localhost/ext/scripts/ext/ext-all-debug.js
return dc(json);
Line 63316 of linked script http://localhost/ext/scripts/ext/ext-all-debug.js
return Ext.decode(response.responseText);
Line 63137 of linked script http://localhost/ext/scripts/ext/ext-all-debug.js
this.result = this.handleResponse(response);
Line 63285 of linked script http://localhost/ext/scripts/ext/ext-all-debug.js
var result = this.processResponse(response);
... Line 9519 of linked script http://localhost/ext/scripts/ext/ext-all-debug.js
options.success.call(options.scope, response, options);
... Line 7 of linked script http://localhost/ext/scripts/ext/ada...t/ext-base.js: In function f
function f(v,w,r,q){if(!w){n(v);return}var t,s;try{if(v.conn.status!==undefined&&v.conn.statu s!=0){t=v.conn.status}else{t=13030}}catch(u){t=130 30}if((t>=200&&t<300)||(Ext.isIE&&t==1223)){s=o(v, w.argument);if(w.success){if(!w.scope){w.success(s )}else{w.success.apply(w.scope,[s])}}}else{switch(t){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:s=e(v.tId,w.argument,(r?r:false),q);if(w.fai lure){if(!w.scope){w.failure(s)}else{w.failure.app ly(w.scope,[s])}}break;default:s=o(v,w.argument);if(w.failure){i f(!w.scope){w.failure(s)}else{w.failure.apply(w.sc ope,[s])}}}}n(v);s=null}
Line 7 of linked script http://localhost/ext/scripts/ext/ada...xt/ext-base.js
function(){if(q&&q.readyState==4){clearInterval(r[u]);r[u]=null;if(t){clearTimeout(k.timeout[u]);k.timeout[u]=null}f(s,v)}}
...
Ошибка происходит в ext-all-debug.js вот в этой функции:
doDecode = function(json){
            return eval("(" + json + ')');    
        }

Похоже на то, что JSON в ответе сервера приходит неправильный.
Может это из-за того что я в php-скрипте не добавляю в возвращаемый
JSON свойство success?
Скрипт добавления в базу у меня просто выполняет insert, о формировании ответного json-а он не заботится.

WalterScott 13.04.2010 15:25

Цитата:

Сообщение от WalterScott (Сообщение 51436)
Может это из-за того что я в php-скрипте не добавляю в возвращаемый
JSON свойство success?

А, ну да, из-за этого.
Когда добавляю в JSON св-во success всё работает.


Дело даже не в отсутствии св-ва success, а в том, что JSON надо отправлять в явном виде. Я думал, что фреймворк сам это сделает в данном случае.

Но короче, я думал, что если действие не предполагает получение чего-то с сервера, то я ничего возвращать и не должен.


Часовой пояс GMT +3, время: 17:19.