我不确定我是否正确行事但如果有人能向我解释这个过程,我将不胜感激
我的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>';
}
}
});
}
答案 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使用。