2013-10-09 2 views
0

Я работаю над элементом приложения, которое я разрабатываю. У меня есть небольшое веб-приложение, предназначенное для отслеживания клиентов для бизнеса. В настоящее время моя способность довольно ограничена. Я сохраняю заметку вместе с другими атрибутами в таблице клиентов. Я решил попробовать и сделать это немного лучше, добавив таблицу заметок и обновив панель ext js с заметками.Публикация строки JSON с несколькими значениями для панели ext js

Все работает, если у меня есть только одна заметка в моем примечании.

В противном случае я получаю эту ошибку.

SyntaxError: invalid property id 
..._date":"2013-10-08","note_body":"abcd"},{"username":"rcox","bdev_firstname":"Tre... 

Это PHP, который я использую.

case 'note': 
$userid = $_REQUEST['clientID']; 
$query = $dbh->prepare("SELECT a.username, b.bdev_firstname, b.bdev_lastname, n.note_date, n.note_body FROM admin a, bdevs b, clients c, notes n WHERE c.clientID=".$userid.";"); 
$query->execute(); 
while($cli = $query->fetch()) { 
$json = '{"username":"'.$cli['username'].'","bdev_firstname":"'.$cli['bdev_firstname'].'","bdev_lastname":"'.$cli['bdev_lastname'].'","note_date":"'.$cli['note_date'].'","note_body":"'.$cli['note_body'].'"},'; 
$note .= $json; 
} 
$note = trim($note, ','); 
echo '{success: true, data:'.$note.'}'; 
break; 

Это моя функция ext js.

function getNote(){ 
    var selectedNote = userGrid.getSelectionModel().getSelected(); 
    Ext.Ajax.request({ 
     url: 'inc/template.php', 
     params: {list: 'note', 
       clientID: selectedNote.get('clientID') 
       }, 
     method: 'POST', 
     success: function(f,a){ 
      var jsonData = Ext.util.JSON.decode(f.responseText); 

       if(jsonData.success == true) 
       { 
        var username = jsonData.data.username; 
        var bdev_firstname = jsonData.data.bdev_firstname; 
        var bdev_lastname = jsonData.data.bdev_lastname; 
        var note_date = jsonData.data.note_date; 
        var note_body = jsonData.data.note_body; 
        RightPanel.update('<b>Admin:</b> ' + username + '<br/><b>Buissiness Dev Rep:</b> ' + bdev_firstname + bdev_lastname + '<br/><b>Note Date:</b> ' + note_date + ' <br/>----------<br/> ' + note_body); 
       } 
       else 
       { 
        RightPanel.update('Access Denied'); 
       } 
     }, 
     failure: function(f,a){ 
      Ext.Msg.alert("Error", "Access Denied"); 
     } 
    }); 
} 

This has been answered below. For more troubleshooting on this topic you can visit my question on Sencha Forums. http://www.sencha.com/forum/showthread.php?273478-MOVED-POST-Posting-a-JSON-array-with-multiple-values-to-ext-js-panel&p=1002545#post1002545

ответ

0

Какой смысл использовать JSON, если вы на самом деле не использовать его.

case 'note': 
$userid = $_REQUEST['clientID']; 
$query = $dbh->prepare("SELECT a.username, b.bdev_firstname, b.bdev_lastname, n.note_date, n.note_body FROM admin a, bdevs b, clients c, notes n WHERE c.clientID = ?"); 
$query->execute(array($userid)); 
$response = json_encode(array('success'=> true, data => $query->fetchAll(PDO::FETCH_ASSOC))); 
echo $response; 
break; 

А потом ext.js часть, где ваша ошибка заключается - если данные массив, вам нужно перебрать его, прежде чем вы можете получить доступ к ассоциативным полям, верно?

  if(jsonData.success == true) 
      { 
       var i, item; 
       for( i = 0; i < jsonData.data.length; i++;) { 
       item = jsonData.data[i];      
       RightPanel.update('<b>Admin:</b> ' + item.username + '<br/><b>Buissiness Dev Rep:</b> ' + item.bdev_firstname+" "+item.bdev_lastname + '<br/><b>Note Date:</b> ' + item.note_date + ' <br/>----------<br/> ' + item.note_body); 
       } 
      } 
+0

спасибо! Я не очень опытный программист, я пытался перебирать массив, но я не мог понять это правильно. Теперь я вижу несколько глупых ошибок. Я очень ценю ваш ответ, и сейчас я пытаюсь попробовать. Еще раз спасибо! –

+0

внесение некоторых изменений - например, я забыл, что 'execute' требует наличия массива в качестве параметра. Но в любом случае, если вы используете php с любой инфраструктурой js, помните - у вас есть 'json_encode', чтобы выполнить эту работу для вас, поэтому не готовьте все массивы самостоятельно. P. S. Если ответ полезен, не забудьте принять его :) – Eternal1

+0

Конечно, конечно! Я бы приветствовал изменения, хотя. У меня проблемы. Например, я получаю «SyntaxError: missing, after for-loop initializer» по неизвестной причине. Я добавил полуточку. странно. В любом случае, спасибо! –

Смежные вопросы