2

jquery ajax呼び出しに応答すると思われる関数を構築しています。私は PHP を初めて使用し、echo を適切に使用する方法を新しく学びましjson_encode(array('error' => false/true;た。この特定のケースでは、 と呼ばれる配列の配列を json エンコードします$list。私のコード:

<?php
 if (!empty($_GET['id'])) {
   $id = $_GET['id'];

   try {
     $objDb = new PDO('mysql:host=localhost;dbname=blankett', 'root', 'root');
     $objDb->exec('SET CHARACTER SET utf8');

     $sql = "SELECT * FROM `forms2` where `master_id` = $id";
     $list = ($objDb->query($sql));

     foreach ($list as $row) {
        $out = array(
            '<tr>' . 
             '<td><a href="'.$row['link_form'].'">'.$row['name_form'].'</a></td>'.
             '<td>'.$row['date_added'].'</td>' . 
            '</tr>');
     }
     echo json_encode(array('error' => false, 'list' => implode('', $out)));

    /*** close the database connection ***/
    $objDb = null;
   }
   catch(PDOException $e)
   {
     echo $e->getMessage();
   }
 } else {
     echo json_encode(array('error' => true));
 }
?>

したがって、問題は一般的json_encode(array('error' => false/true;にどのように使用し、この特定のケースでどのように使用するかです。

4

3 に答える 3

1

ループの最初は、 $listから取得した最後の行のみを$outに割り当てます。次に、implode は配列を提供せず、代わりに配列をパラメーターとして取り、指定した区切り文字で区切られた文字列を返します。

php.net/内破

これがあなたがやろうとしていることです:

     $out = array();
     foreach ($list as $row) {
       $out[] = '<tr><td><a href="'.$row['link_form'].'">'.$row['name_form'] .   
               '</a></td><td>'.$row['date_added'].'</td></tr>';
     }

     echo json_encode('error' => false, 'list' => $out);

または、配列の代わりに文字列を渡そうとしている場合は、前と同じように implode を使用します$out

于 2013-03-28T15:59:24.733 に答える
1

次のようなことができます:

   $result = true;

    echo json_encode(array("error"=>$result
                               ));

その後:

    $.ajax({
    type: "POST",
    url: "yourfile.php",
    data : "data1="+yourdata1+"&data2="+yourdata2,
    dataType: "json",
    success: function (data) {
    var error = data['error'];
    if(error === false){
    //do something                                                  
    }
if(error === true) {
    //do something else     
}
   }
      });//end ajax             
于 2013-03-28T16:01:46.407 に答える
1

一般に、json_encode は、データを「内破」する必要なく、直接データに使用できます。

$out が配列の配列である場合、コードは次のようになります。

echo json_encode(array('error' => false, 'list' => implode('', $out)));

生産します:

{ result: false, list: 'Array,Array,Array' }

代わりに、json_encode がその仕事をすることを許可する必要があります。

echo json_encode(array('error' => false, 'list' => $out));

それはあなたに与えるでしょう:

{ result: false,
  list:
   [ [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ] ] }

ただし、ループに関する前のコメントは重要です。ループは、反復ごとに $out 変数を再割り当てします。= だけでなく []= を追加することをお勧めします。これは、「これを配列にプッシュする」ことを意味する PHP のショートカットです。実際にはarray_push()のショートカットです

foreach ($list as $row) {
  $out []= array('<tr><td><a href="'.$row['link_form'].'">'.$row['name_form'].'</a></td>  <td>'.$row['date_added'].'</td></tr>');
}

最後に、必要でない限り、テーブルの行は配列である必要はありません。

于 2013-03-28T16:16:15.163 に答える