2010-07-13 6 views
0

load failed - arguments: [Objet api = Objet, Object request = Objet lecteur = Objet scope = Objet, Objet tId = 0 status = 200 statusText = OK , SyntaxError: missing} après la liste de propriétés message = missing} after property list]ExtJS: manquant} après la liste de propriétés mais je ne vois aucune erreur de code

J'ai eu cette erreur en ajoutant une exception à mon magasin mais je ne vois pas de vraie erreur dans mon code ... peut-être un autre ensemble d'yeux aidera.

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] 
}); 

});

Je ne pense pas que publier le reste de mon php serait pertinent puisque tout fonctionne mais j'espère que quelqu'un peut repérer quelque chose que mes mauvais yeux ne peuvent pas.

Répondre

2

Je vois une virgule supplémentaire ici:

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

également sur le LogGrid. Cela pourrait être ce

EDIT: La réponse renvoyée de PHP ne semble pas que ce sera valide JSON s'il y a une erreur data{"error_title" est faux, devrait être data:{"error_titel"

Vous devriez vraiment regarder les objets de construction/tableaux en PHP et echo ceux-ci en utilisant json_encode au lieu de construire manuellement JSON.

+0

Ce qui est étrange est que je peux le: "message": " '[message'].' $ Tmp." dans le PHP, et la grille affiche les dates très bien. Je vais devoir vérifier ce json_encode. – TBell

+1

Eh bien, le 'Message' pourrait contenir un guillemet ou un autre caractère spécial dans les littéraux de chaîne JSON/JavaScript. Avoir échoué à échapper des personnages pour leur contexte est une grande source de failles de sécurité, c'est pourquoi vous voulez utiliser 'json_encode' pour créer votre sortie et certainement pas de ficelage. – bobince

+0

Est-ce que quelque chose ci-dessous serait considéré comme un personnage spécial? C'est juste votre journal de base dhcp. J'ai réussi à faire tomber le problème à quelque chose qui n'est pas correctement analysé ici, parce que mon code fonctionne et peut stocker tout le reste à sa place ... sauf cette partie "Message". Dhcpd: DHCPACK le 10.193.XX à 00: 21: xx: 53: xx: e1 (xxxxxx-PC) via 10.193.xx.xx Avr 9 00:00:02 dhcpd: Ajout d'une nouvelle carte vers l'avant de xx.wifi-uhs.xx à 10.193.xx.xx Avr 9 00:00:02 dhcpd: ajout de la carte inversée à partir de 242.244.xx.xx.in-addr.arpa. à xx.wifi-uhs.xx – TBell

0

BTW: Pour trouver des virgules errant, je fais une recherche avec le motif suivant:

\, \ s * (} |])

Cela permet d'économiser des tas de temps, d'autant plus que les différents navigateurs sont plus robuste que d'autres à des virgules mal placées.