Ajax将对象数组返回给jquery和php

时间:2017-06-01 23:43:13

标签: php jquery arrays ajax

我不确定我是否正确行事但如果有人能向我解释这个过程,我将不胜感激

我的main.php文件中有一个带有onclick函数的div

<div class='show_products' onclick='getData(".$id.")'>

jquery函数:

function getData(id){    
$.ajax({
    url: 'ajax_info.php',
    type: 'POST',
    dataType:'json',
    data: {id: id},
    success: function(response) {
        console.log(response); //shows a list of objects (array elements)
    }
});
}

和ajax文件

$sql = "SELECT ......";
$results = Db::getInstance()->ExecuteS($sql);
foreach($results as $row) {
    $product_id = $row['product_id'];
    $date = $row['date'];
    $name = $row['name'];

    $array_info['product_id'] = $product_id;
    $array_info['date'] = $date;
    $array_info['name'] = $name;
}

echo json_encode($array_info);

上面的代码返回在ajax文件中创建的数组,返回到成功函数中的jquery。

我不明白的是: 如何通过数组并在main.php文件中使用它?我想迭代它并创建一个包含数组中值的表。 含义3列,产品ID - 日期 - 名称,它们将由来自ajax的返回数组填充。

这可能还是我做错了?

非常感谢任何帮助

编辑: 更新了jquery代码

function getData(id){    
$.ajax({
    url: 'ajax_info.php',
    type: 'POST',
    dataType:'json',
    data: {id: id},
    success: function(response) {
        document.getElementById('table_'+id).style.display='block';

        for ( var i = 0; i < response.length; i++ ) {
            console.log(response[i]);                
            var div = document.getElementById('table_'+id);
            div.innerHTML = div.innerHTML + '<tr><td>'+response[i].product_id+'</td><td></td><td></td><td></td><td></td></tr>';
        }
    }
});
}

4 个答案:

答案 0 :(得分:3)

foreach的每个循环都会删除预览循环中定义的数据,所以当你的foreach完成迭代后,你最终会得到最后一组数据。

您无需遍历数组,因为您的查询已经返回数组

$sql = "SELECT ......";
$results = Db::getInstance()->ExecuteS($sql);
echo json_encode($results);

现在,如果您想从成功函数访问数据,您只需要将它们称为与行相同的名称。例如,如果您的行是 product_id 日期名称,您将以这种方式调用它们:

function getData(id){    
$.ajax({
    url: 'ajax_info.php',
    type: 'POST',
    dataType:'json',
    data: {id: id},
    success: function(response) {
        response = JSON.parse(response);

        console.log("Product id is: " + response[0].product_id);
        console.log("Product name is: " + response[0].name);
        console.log("Product date: " + response[0].date);
    }
});
}

您还需要了解以下内容:出于某种原因,您希望在不更改数据库的情况下为json设置不同的变量名称,然后您必须执行以下操作:

$sql = "SELECT ......";
$results = Db::getInstance()->ExecuteS($sql);
$newResults = array();

foreach ($results as $row)
{
    $newResults[] = array('newId' => $row['product_id'], 'newName' => $row['name'], 'newDate' => $row['date']);
}

echo json_encode($newResults);

这将导致更改JSON中的变量:

function getData(id){    
$.ajax({
    url: 'ajax_info.php',
    type: 'POST',
    dataType:'json',
    data: {id: id},
    success: function(response) {
        response = JSON.parse(response);

        console.log("Product id is: " + response[0].newId);
        console.log("Product name is: " + response[0].newName);
        console.log("Product date: " + response[0].newDate);
    }
});
}

答案 1 :(得分:1)

你需要做的第一步是将响应解析为json, 然后你必须使用id。

创建表格标签

示例这是你的JS

<table border="1" id="table_id">
</table>

然后这是html

This bundle is invalid . The Info.plist file for /Payload/XXX.app/Sticker Pack.stickerpack is missing or could not be read.

答案 2 :(得分:0)

这里的问题是javascript不允许关联数组,因此您必须使用常规数字数组或对象。

以下是使用数值数组的示例:

$sql = "SELECT ......";
$results = Db::getInstance()->ExecuteS($sql);
foreach($results as $row) {
    $product_id = $row['product_id'];
    $date = $row['date'];
    $name = $row['name'];

    $array_info[0] = $product_id;
    $array_info[1] = $date;
    $array_info[2] = $name;
}

echo json_encode($array_info);

然后你可以得到这样的输出:

function getData(id){    
$.ajax({
    url: 'ajax_info.php',
    type: 'POST',
    dataType:'json',
    data: {id: id},
    success: function(response) {

      var product_id = response[0];
      var date = response[1];
      var name = response[2];

    });
    }

答案 3 :(得分:0)

您可以在响应中使用JSON.parse()函数,以使其可供JavaScript使用。