2011-03-31 6 views
1

у меня есть этот JQuery код, который poplautes селектор входного сигнала, который должен отображаться как это:отображение json-данных из php json_encode?

$("#demo-input-pre-populated").tokenInput("http://shell.loopj.com/", { 
       prePopulate: [ 
        {id: 123, name: "Slurms MacKenzie"}, 
        {id: 555, name: "Bob Hoskins"}, 
        {id: 9000, name: "Kriss Akabusi"} 
       ] 
      }); 

, когда я пытаюсь получить Вейлы из базы данных с помощью PHP, как это:

prePopulate: [ 
        <? 
        $responses = array(); 
        $topicJSON=getQtopics($getQ); 
        while($row = mysql_fetch_array($topicJSON)){ 
        $response = array(
         'id' => $row['id'], 
         'name' => $row['name'] 

        ); 
        $responses[] = $response; 
       } 
       echo json_encode($responses); 
?> 
     ], 

, который отображает JSON данные, как это:

prePopulate: [ 
     [{"id":"1","name":"Dormitree"}, 
     {"id":"1482","name":"carriage of goods"}]   
     ], 

но на #demo-input-pre-populated" входе я получаю не определено, и я думаю, что его becuase РНР п от эхо json propelrly, как я могу исправить это спасибо :))

ответ

3

Если посмотреть два JS выхода, единственное отличие состоит в том, что у вас есть два добавочные квадратные скобки [] в том случае, когда вы выходите из PHP, поэтому в этом случае вы создаете массив массивов объектов JSON, тогда как все, что вам нужно, это массив объектов JSON.

Избавьтесь от вмещающего [] для prePopulatejson_encode, потому что уже делает это для вас:

prePopulate: <? 
       $responses = array(); 
       $topicJSON=getQtopics($getQ); 
       while($row = mysql_fetch_array($topicJSON)){ 
         $response = array(
         'id' => $row['id'], 
         'name' => $row['name'] 
        ); 
        $responses[] = $response; 
       } 
       echo json_encode($responses); 
      ?>, 
+0

спасибо очень чистый ответ :))) – pingpong

+0

я могу задать вам еще один вопрос, я бы смог обновить prePoplaute, используя jquery после действия click, то есть '$ (". button "). click (// обновить prePoplaute', если вы получите то, что я имею в виду :)) – pingpong

+1

@pingpong - это не похоже, что плагин поддерживает это, вы можете проконсультируйтесь с автором или поместите запрос функции. Если вы посмотрите на источник, функция 'insert_token()' вставляет новые токены, но я недостаточно разбираюсь в JavaScript, чтобы выяснить, как (если возможно) получить ссылку на эту функцию и вызвать ее с новыми значениями. –

2

Ваша переменная prePopulate представляет собой массив, содержащий массив объектов, но вы просто хотите, чтобы это был массив объектов.

Вы можете снять [и] скобки до и после PHP блока, или эхо это в PHP блока: array_pop(json_decode($responses))

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