【问题标题】:Removing array brackets in php - AJAX request删除 php 中的数组括号 - AJAX 请求
【发布时间】:2018-01-15 16:38:09
【问题描述】:

当我从我的数据库中调用我的查询并显示它时,我试图删除数组括号,但我得到以下结果:

  • ["title1"]
  • ["title2"]
  • ["title3"]

我需要它显示如下:

  • 标题1
  • 标题2
  • 标题3

我认为添加 json-encode.php 可以解决此问题,但事实并非如此。我究竟做错了什么?任何帮助表示赞赏!谢谢!

Javascript(Ajax 请求)

$(document).ready(function() {
        $.ajax({
            url: 'get.php',
        }).done(function(data){
            $('.right ul').append('<li>'+ data +'</li>');
        });
});

PHP (get.php)

<?php

$host = "localhost";
$user = "adminn";
$pass = "1234";
$db = "admin";

$con = mysqli_connect($host, $user, $pass, $db);

$query = mysqli_query($con, "SELECT DISTINCT title FROM sample_table WHERE username = 'admin' ");

// $data = str_replace(array("[\'","'\]"),'',$data);
foreach($query as $data)
{
    echo '<li>' . json_encode(array_values($data)) . '</li>';
}
?>



已解决!

我换了

`'<li>' . json_encode(array_values($data)) . '</li>';`



'&lt;li&gt;' . $data['title'] . '&lt;/li&gt;';

【问题讨论】:

  • 数据库里面有什么?
  • 您在 AJAX 调用和循环 data 中缺少 dataType: "json",因为它是一个值数组。 .done() 不会自动循环数据并将您的匿名函数应用于每个项目。
  • 如果你通过 Ajax 调用那个 PHP 文件,你要么想输出一个 JSON 并用你的 JS Ajax 请求解析它 - 要么改变你的 Ajax 请求,让它只从 PHP 中获取输出并将其附加到您的 UL。
  • 另一个问题是您返回&lt;li&gt;some stuff&lt;/li&gt; 并附加&lt;li&gt; data &lt;/li&gt; 变成&lt;li&gt;&lt;li&gt;some stuff&lt;/li&gt;&lt;/li&gt;
  • 你不能编码array_values($data),而是$data['title']

标签: javascript php ajax


【解决方案1】:

jQuery

$(document).ready(function() {
        $.ajax({
            url: 'get.php',
            dataType: 'json'
        }).done(function(data){
            $.each(data, function(i,v) {
                $('.right ul').append("<li>"+v+"</li>");
            });
        });
});

PHP

<?php

$host = "localhost";
$user = "adminn";
$pass = "1234";
$db = "admin";

$mysqli = new mysqli($host, $user, $pass, $db);

$query = "SELECT DISTINCT title FROM sample_table WHERE username = 'admin'";

if ($result = $mysqli->query($query)) {

    $response = array();

    while ($row = $result->fetch_assoc()) {
        array_push($response, $row['title']);
    }

    echo json_encode($response);

}
?>

首先,您需要在 ajax 调用中明确声明数据类型。此外,我注意到您对响应的解析不正确并在上面进行了更改。

【讨论】:

  • array_push($data)??
  • 嘿@JohnBell,谢谢。我试过但没有运气!答案很简单(太简单了) - 我删除了 encode array_values($data) 并只使用了 $data['title']
  • 您收到什么错误?该解决方案未解决您的代码的其他问题。
【解决方案2】:

问题就在这里:

echo '<li>' . json_encode(array_values($data)) . '</li>';

查询是:SELECT DISTINCT title FROM sample_table WHERE username = 'admin'

查询返回的每一行都是一个 PHP array,它在键 title 下包含一个值。这就是您要打印的内容。使用square brackets syntax for arrays 访问值:$data['title']

使用json_encode() 将数据放入网页中没有任何意义。用于生成 HTML 的动态数据必须使用 htmlspecialchars() 正确编码为 HTML。

你的代码应该是:

foreach($query as $data)
{
    echo '<li>' . htmlspecialchars($data['title']) . '</li>';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2014-01-28
    • 2016-12-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    相关资源
    最近更新 更多