1

テーブルの一部である my に $.postjquery を使用して、本の最初の文字で本の行をフェッチしようとしています。<td> </td>

私のテーブルは次のようになります:

<table id="myTable">

  <thead>
    <tr>
      <th class="page">pages</th>
      <th class="book_name">Book Name</th>
      <th class="author">Author</th>
    </tr>
  </thead>

  <tbody id="result_list">
  <!--Here is data which will come with ajax($.post) -->                 
  </tbody>
</table>

jqueryコードを書くと、私は成功しますが、次$("#result_list").html(data)のようになります:

$.post( "/ajax.php", { book_first_letter: 'A'},
  function( data ) {
      $( "#result_list" ).html( data );
  }
);

しかし、すべてのデータを HTML として取得して に挿入したくありません<tbody>。別の変数として ajax.php からデータをフェッチしたい。例えば; book_name,logo,pages,author. そして、それらを に挿入したいと思います<td> </td>

私のajax.phpは次のようなものです:

 $letter= trim($_POST['book_first_letter']);    
 $query = $this->book_model->get_books_by_letter($letter);       
 foreach ($query as $book) { ?>

     <tr>
         <td> <?php echo $book->page; ?> </td>
         <td> <?php echo $book->name; ?> </td>
         <td> <?php echo $book->author; ?> </td>

     </tr>
   <?php  
}
?>

各変数 (つまり、$book->name) を取り、それを に挿入する方法はあります<td></td>か?

4

6 に答える 6

2

以下を使用して、データを JSON に変換できますjson_encode()

$letter= trim($_GET['book_first_letter']);    
$query = $this->book_model->get_books_by_letter($letter);    
echo json_encode( $query );

クライアント側getJSON()では、PHP で使用していたのと同様のオブジェクトを JavaScript で使用して作成します。

$.getJSON( "/ajax.php", { book_first_letter: 'A'},
  function( data ) {
      // data has the same properties as $query did in PHP
  }
);

編集

@MrCode が指摘したようgetJSON()に、GET リクエストを実行するだけです。そこで、PHP コード内のパラメータへのアクセス方法を から に変更しまし$_POST$_GET

いずれにせよ、ここでの GET リクエストはブラウザーによってキャッシュされる可能性があるため、おそらく GET リクエストの方が適切な選択ですが、POST リクエストは毎回実行する必要があります。

もう 1 つのオプションは、POST リクエストをそのままにしておくことです。これにより、クライアント側の JS が次のように変更されます。

$.post( "/ajax.php", { book_first_letter: 'A'},
  function( data ) {
      // data has the same properties as $query did in PHP
  }
  , 'json'
);
于 2012-11-13T16:20:17.847 に答える
2

できるだけでなく、すべきです。PHP が html をテキストとして返すのではなく、JSON オブジェクトを返すようにします。

いくつかのことを行う必要があります。最初に、「json」の dataType の $.post() 呼び出しに 4 番目の引数を追加します。

$.post( "/ajax.php", { book_first_letter: 'A'}, callback, "json" );

次に、PHP に結果の JSON ヘッダーを送信させることをお勧めします。そのため、PHP でデータを送信する前に使用します。

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

そして、本のモデルのプロパティをエコーアウトするのではなく、json_encode() を使用するだけです

$letter= trim($_POST['book_first_letter']);    
$books = $this->book_model->get_books_by_letter($letter);
echo json_encode( $books );

これでクライアントは生データを取得し、js/jQuery を使用して本をループしてテーブルに追加できます。

function callback( books)
{
   var i = 0, len = books.length, html = "";

    for( ; i < len; ; )
    {
        html += "however you want to structure the data";
    }

    $( "#result_list" ).html( html );
}
于 2012-11-13T16:28:42.510 に答える
0

JSONはこれを行うための最良の方法です

そして、あなたが戻ってきているものに応じて、次のよう$query に簡単にする必要があります

echo json_encode($query)

次に、クライアント側の JavaScript でデータを処理する必要があります。

于 2012-11-13T16:19:07.273 に答える
0

はい、あります - JSON を使用します。PHPにはjson_encode機能があります。json_encodeクライアントに送信するために使用するデータからjsonのような配列を作成するだけです。クライアント側では、 with を使用$.postdataType: jsonます。

于 2012-11-13T16:19:29.907 に答える
0

変数を JSON として返すことができます。

あなたのajax.phpで:

$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);

あなたのjquery AJAX呼び出しで:

$.post('ajax.php', { book_first_letter: 'A'}, function(data) {
    console.log(data) //view the data returned in the console of firebug
},'json');
于 2012-11-13T16:20:01.387 に答える
0

Jsonエンコード。また、すぐに ajax のニーズに合わせてバックボーンとアンダースコアスタックを検討し始めるように思えます。クライアントでのテンプレート化を特徴としています。これは、その例で間違いなく使用できるものの 1 つに見えます。

于 2012-11-13T16:22:57.153 に答える