ExtJS: отсутствует} после списка свойств, но я не вижу ошибок кода - PullRequest
0 голосов
/ 13 июля 2010

загрузка не удалась - аргументы: [Object api = Объект, Запрос объекта = Читатель объекта = Область объекта = Объект, tId объекта = 0 status = 200 statusText = OK, Ошибка синтаксиса: отсутствует} после сообщения списка свойств = отсутствует} после свойстваlist]

Я получил эту ошибку, добавив исключение в свой магазин, но не вижу никакой реальной ошибки в моем коде ... возможно, поможет другой набор глаз.

php:

 case 'messages':
                    if(isset($_SESSION['id'])){
            $stmt = $dbh->prepare("Select ID, ReceivedAt, Message from SystemEvents Limit 100");
                            $stmt->execute();

            while($tmp = $stmt->fetch()){
                $y .= '{"ID":"'.$tmp['ID'].'","ReceivedAt":"'.$tmp['ReceivedAt'].'","Message":"'.$tmp['Message'].'"},';
            }
            $y = trim($y,',');
            if(isset($_REQUEST['callback'])){
                echo $_REQUEST['callback'].'({"dates":['.$y.']});';
            }else{
                echo '{"dates":['.$y.']}';
            }
        }else{
            if(isset($_REQUEST['callback'])){
                                    echo $_REQUEST['callback'].'({success: false, data{"error_title": "Error", "errormsg": "Cannot display dates"}})';
                            }
                            else{
                                    echo '{success: false, data{"error_title": "Error", "errormsg": "Cannot display dates"}}';
                            }
                    }
            break;

extjs:

Ext.onReady (function () {

var logStore = new Ext.data.JsonStore({
    autoLoad: true,
    url: 'inc/interface/config.php?list=messages',
    root: 'dates',
    idProperty: 'ID',
    fields: ['ID', 'ReceivedAt', 'Message'],
    listeners: {
                loadexception: function() {
                    console.log('load failed -- arguments: %o', arguments);
                }
        }
}); 

var dateStore = new Ext.data.JsonStore({
    autoLoad: true,
    url: 'inc/interface/config.php?list=date_options',
    root: 'dates',
    idProperty: 'ID',
    fields: ['ID', 'ReceivedAt'],
    listeners: {
                loadexception: function() {
                    console.log('load failed -- arguments: %o', arguments);
                }
        }
});

var dateSelect = new Ext.form.DateField({
    fieldLabel: 'Pick a date',
    width: 190,
    align: 'center',
    frame: true
});

var dateCombo = new Ext.form.ComboBox({
    store: dateStore,
    mode: 'local',
    valueField: 'ID',
    displayField: 'ReceivedAt',
    editable: false,
    emptyText: 'Select a Date',
    width: 250,
    listeners:{
        activate: function(){
            dateStore.reload();
        }
    }
});

var searchField = new Ext.form.TextField({
    fieldLabel: 'Search Criteria',
    emptyText: 'Search....',
    width: 190, 
    frame: true

});

var searchButton = new Ext.Button({
    text: 'Search',
});

var clearButton = new Ext.Button({
    text: 'Clear',
    tooltip: 'Clears all your search data'
});

var searchPanel = new Ext.Panel({
    layout: 'form',
    region: 'east',
    width: 300,
    collapsible: true,
    alignButton: 'right',
    title: "Search Panel",
    items: [dateSelect, dateCombo, searchField],
    buttons: [clearButton, searchButton]
});


var logGrid = new Ext.grid.GridPanel({
    region: 'center',
    store: logStore,
    colModel: new Ext.grid.ColumnModel({
        columns: [{
            id: 'received',
            header: 'Received',
            dataIndex: 'ReceivedAt',
            width: 250
        },{
            id: 'message',
            header: 'Logs',
            dataIndex: 'Message',
            width: 750
        }]
    }),
});


var mainViewport = new Ext.Viewport({
    layout: 'border',
    items: [logGrid, searchPanel]
});

});

Не думаю размещать остальныемоего php был бы уместен, так как все это работает, но, надеюсь, кто-то может заметить что-то, что мои плохие глаза не могут.

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Я вижу здесь дополнительную запятую:

var searchButton = new Ext.Button({
    text: 'Search',
});

Также в LogGrid. Это может быть

РЕДАКТИРОВАТЬ: ответ, отправленный обратно из PHP не выглядит как будет действительным JSON, если есть ошибка

Вы действительно должны посмотреть на создание объектов / массивов в PHP и повторить их, используя json_encode вместо того, чтобы собирать JSON вручную.

0 голосов
/ 14 июля 2010

Кстати: чтобы найти случайные запятые, я выполняю поиск по следующей схеме:

\, \ s * (} |])

Это экономит кучу времени, тем более чтобраузеры более устойчивы, чем другие, к неуместным запятым.

...