Страницы

Поиск по вопросам

понедельник, 13 апреля 2020 г.

Серверная обработка изменений Store ExtJS

#javascript #extjs #php

                    
Здравствуйте!
Разбираюсь с ExtJS, с переменным успехом... 
Ни как не могу принять на сервере данные отправляемые Store при изменении записей
(добавлении, изменении или удалении). Пишет что данные уходят POST-ом, но на сервере
ни $_POST, ни $_GET, ни $_REQUEST отправленные данные не показывает - как будто ничего
не отправлялось (ну кроме случайного значение в $_GET - _dc=1357565039902).

Вот что уходит на сервер (взял из консоли Хрома), соответственно, при удалении, обновлении
и добавлении:

Request URL:http://localhost/service/destroy/news.php?_dc=1357565811429
Request Method:POST
Status Code:200 OK
Query String Parameters:
  _dc:1357565811429
Request Payload:
  {"items":{"id":5}}

Request URL:http://localhost/service/update/news.php?_dc=1357566047052
Request Method:POST
Status Code:200 OK
Query String Parameters:
  _dc:1357566047052
Request Payload:
  {"items":{"datepubl":"2012-12-01T00:00:00","title":"the Update Plan","alias":"the-update-plan","new":"

small text new

","newfull":"

full text new

","id":4}} Request URL:http://localhost/service/create/news.php?_dc=1357566179903 Request Method:POST Status Code:200 OK Query String Parameters: _dc:1357566179903 Request Payload: {"items":{"id":0,"datepubl":null,"dateclose":null,"title":"the NEW new","alias":"the-new-new","new":"text the NEW new","newfull":""}} Посылает эти запросы следующий Store: var storeNews = Ext.create('Ext.data.Store', { autoLoad: true, autoSync: true, idProperty: 'id', remoteFilter: true, fields: [ { name: 'id', type: 'int' }, { name: 'datepubl', type: 'date' }, { name: 'dateclose', type: 'date' }, { name: 'title', type: 'string' }, { name: 'alias', type: 'string' }, { name: 'new', type: 'string' }, { name: 'newtext', type: 'string' } ], proxy: { type: 'ajax', api: { read: 'service/view/news.php', create: 'service/create/news.php', update: 'service/update/news.php', destroy: 'service/destroy/news.php' }, reader: { type: 'json', successProperty: 'success', root: 'data', messageProperty: 'message' }, writer: { type: 'json', writeAllFields: false, root: 'data' }, listeners: { exception: function(proxy, response, operation){ Ext.MessageBox.show({ title: 'REMOTE EXCEPTION', msg: operation.getError(), icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK }); } } } }); Подскажите, пожалуйста, как принять переданные данные на сервера ? Или как их правильно отправить, если я делаю это не верно ?..


Ответы

Ответ 1



Все проще чем кажется: $data = json_decode(file_get_contents('php://input')); Store хочет в ответе получить готовый вид этой записи. Только тогда он будет уверен, что эта строка таблицы существует на самом деле, а не является какой то "вымышленной". У каждой записи в store есть свойство phantom. Оно означает, существует ли запись реально, или она временно появилась в store. По добавлению store будет отсылать все фантомные записи. Когда store получит в ответе данные записи, он поймет, что сервер её обработал или сохранил, и присвоит значение phantom = false, то есть запись реальная. print( json_encode( $data ) ); Если выполняется добавление записи, то ей должен быть присвоен ID, если такой имеет место быть.

Комментариев нет:

Отправить комментарий