PHP AJAX JSON 迭代

PHP AJAX JSON iteration

我正在熟悉 ajax 和 json。

我的页面是 addAccount.php,在里面,我有一个包含以下输入的表格:

 <input type="text" id="partnerCode" />
 <input type="button" id="pCodeSearch" value="Search" />

我有一个名为 global.js 的 JavaScript 页面获取信息:

 $('input#pCodeSearch').on('click' , function()
 {
   var partnercode = $('input#partnerCode').val();
   if($.trim(partnercode) != '')
   {
     $.post('api/pCodeSearch.php', {partnercode: partnercode}, function(data)
     {
       $('div#partner-data').text(data);
     });
   }
 });

在上面的代码中,您将看到名为pCodeSearch.php 的处理页面。这是代码:

 <?php
   if(isset($_POST['partnercode']) === true && empty($_POST['partnercode']) === false)
   {
     require "../include/database.php";
     require "../include/sessions.php";

     $search = "SELECT FULL_NAME, PARTNER_CODE from partner WHERE PARTNER_CODE = '"htmlentities(stripslashes(trim($_POST['partnercode'])))."'";

     $query = mysqli_query($dbc, $search); // $dbc is the connection string

     if(mysqli_num_rows($query) !== 0)
     {
       $out = array();
       while($row = $query->fetch_assoc())
       {
         $out[] = $row;
       }
       echo json_encode($out);
       mysqli_free_result($query);
     }
     else
     {
       echo 'Partner not found';
     }
   }
 ?>

使用以上所有代码,我可以在名为 #partner-data 的 DIV 标记中显示,正如您在我上面的 JavaScript 代码中看到的那样。

但这是输出:

 [{"FULL_NAME":"PARTNER SA","PARTNER_CODE":"0000011182"}]

我只想回显 PARTNER SA 和 0000011182。

我在 JavaScript 页面上尝试过此操作:

 $.each(data, function(index, item)
 {
   $('<div>').
     attr('value', item.PARTNER_CODE).
     text(item.FULL_NAME).
     appendTo($('#partner-data'));
 });

但屏幕上什么都没有 returns。

而不是:

$('div#partner-data').text(data);

尝试:

 $('div#partner-data').text(data.d.["FULL_NAME"]);

你的循环似乎是正确的如果从php返回的json字符串已经被解析。

当您第一次尝试看到一个字符串时,我的猜测是它没有被解析,所以您需要:

var obj = JSON.parse(data);
$.each(obj, function(index, item) {
   $('<div>').
     attr('value', item.PARTNER_CODE).
     text(item.FULL_NAME).
     appendTo($('#partner-data'));
});

您还可以告诉 jquery 使用 $.post 的第 4 个参数自动执行此操作以指定返回数据的类型:

$.post('api/pCodeSearch.php', {partnercode: partnercode}, function(data) {
    // your original $.each() loop
  }, 'json');
   ^^^^^^^^ here

我想我会帮助你:),

首先为 json 响应设置正确的内容类型,

所以这样写:

header('Contenty-Type: application/json');
echo json_encode($out);

然后客户端响应处理函数将如下所示:-

$('input#pCodeSearch').on('click' , function()
 {
   var partnercode = $('input#partnerCode').val();
   if($.trim(partnercode) != '')
   {
     $.post('api/pCodeSearch.php', {partnercode: partnercode}, function(data)
     {
        // $('div#partner-data').text(data);
        // Because data value is json, and actually it is returing a array of objects
        // so

        for(i = 0; i < data.length; i++){

            currect_object = data[i];
            $('div#partner-data').append(current_object.FULL_NAME + '\t' + current_object.PARTNER_CODE + '\n');  
           // here you can also create an templete and can use that like 
           //  output_html = mytemplete(current_object.FULL_NAME, current_object.PARTER_CODE);
           //  $('div#partner-data').append(output_html);  

        } // __iterate to all array of objects

     }); // __post
   } // __if
 });

而且我认为您不需要每个 jquery,可能有一些句法错误,因为我没有检查,:) 谢谢,