#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, если такой имеет
место быть.