【问题标题】:How do I post specific json data from php/mysql instead of all data如何从 php/mysql 发布特定的 json 数据而不是所有数据
【发布时间】:2014-06-26 00:09:24
【问题描述】:

我的这段代码运行良好,除了它将发布来自 php 的所有结果,我只需要特定的 json_encoded 数据。这是从我的数据库中提取的 PHP。

<?php
session_start();
$_SESSION['charname'] = 'Egahtrac';

require_once ('mysqli_connect.php');

$q = "SELECT * FROM dps WHERE charname='" . $_SESSION['charname'] . "';";
$r = mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
$dmg = $row['dmg'];
$curr_hp = $row['curr_hp'];
$tot_hp = $row['tot_hp'];
$attk_spd = $row['attk_spd'];

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    if (isset($_POST['attack'])) {
        if ($curr_hp > 0) {
            $row['curr_hp'] = $row['curr_hp'] - $row['dmg'];

            $q = "UPDATE dps SET curr_hp='" . $row['curr_hp'] . "' WHERE charname='" . $_SESSION['charname'] . "';";
            $r = mysqli_query($dbc, $q);

            echo json_encode($row);
        }
    }
}

这里是 jQuery

$('input#attack').on('click', function() {
    $.post('dpsloop2.php', { attack: true }, function(data) { $('span#curr_hp').text(data.dmg); });
});
// see here that i'm just trying to test if it works by echo'ing the dmg value to the curr_hp span to see if it changes.
$('#dpsform').submit( function() {
    return false;
});

我知道这与 .text(data) 部分有关。但是,如果我尝试做 .text(data.curr_hp) 它不起作用。我检查了 json 数组是否从 php 回显了正确的格式,那么为什么我不能从 JSON 数组中访问该 data.curr_hp 呢?

【问题讨论】:

    标签: php jquery mysql ajax json


    【解决方案1】:

    在您的 PHP 中,您应该只调用一次 echo json_encode(something)。 JSON 响应必须是单个对象或数组;如果你想返回多个东西,你需要把它们放在一个数组中。所以你应该这样做:

    echo json_encode($curr_hp);
    

    然后需要使用dataType 参数到$.post() 告诉它响应是JSON。然后它会为你解析。

    $.post('dpsloop2.php', {attack: true }, function(data) {
        $('span#curr_hp').text(data);
    }, 'json');
    

    如果要返回整行,应该是:

    echo json_encode($row);
    

    JS 应该是这样的:

    $.post('dpsloop2.php', {attack: true }, function(data) {
        $('span#curr_hp').text(data.curr_hp);
        $('span#dmg').text(data.dmg);
    }, 'json');
    

    【讨论】:

    • 好吧,假设我想将数组中的所有数据提取到 jquery 中,并且我使用数组 json_encode($row),我可以使用 data.curr_hp 仅访问 curr_hp 数据吗?
    • 是的,您可以这样做。我打算展示那个版本,但后来我看到评论说“我希望它只回显 curr_hp”。
    • 事实上,如果你只是回显一个数字或字符串,你甚至不需要 JSON —— 你真的只需要数组和对象。
    • 但是说我有一个输出大量数据的 php 脚本。我不希望它输出页面上的所有内容。我可以让单个字符串正常工作。我无法让整个数组正常工作并从数组中输出选择数据。 $row 是根据mysql信息创建的数组。
    • 如果你echo json_encode($row),那么JS应该使用.text(data.curr_hp),它只会得到它的一部分。如果你想把不同的值放在不同的地方,那就去做吧——把data.curr_hp放在一个地方,data.tot_hp放在另一个地方,等等。
    【解决方案2】:

    刚刚开始工作,这是解决方案,它运行良好。我必须将数据声明为序列化数组。

    $('input#attack').on('click', function() {
    var data = $(this).serialize();
    $.post('dpsloop2.php', { attack: true }, function(data) { $('span#curr_hp').text(data.dmg); },"json");
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多