1

我正在尝试使用 jquery 通过书籍的第一个字母将书籍行获取$.post到我<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 获取数据作为单独的变量。例如; 书名、徽标、页面、作者。我想将它们插入<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()在 JavaScript 中使用并拥有与 PHP 中类似的对象:

$.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 请求每次都必须执行。

另一种选择是保留 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 对象。

你需要做一些事情。首先为您的 $.post() 调用添加第四个参数,以获取“json”的数据类型。

$.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 的数组,json_encode然后将它们发送给客户端。在客户端,使用$.postwith dataType: 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 需求。它在客户端具有模板功能,这看起来是您在该示例中绝对可以使用的东西之一

于 2012-11-13T16:22:57.153 回答