如何从php / mysql发布特定的json数据而不是所有数据

时间:2014-06-26 00:09:25

标签: php jquery mysql ajax json

我有这个代码工作得很好,除了它将发布来自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(数据)部分有关。但是如果我尝试做.text(data.curr_hp)它就不起作用了。我已经检查过json数组是否正在回显php的正确格式,为什么我不能从JSON数组中访问那些data.curr_hp?

2 个答案:

答案 0 :(得分:0)

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

echo json_encode($curr_hp);

然后需要使用dataType的{​​{1}}参数告诉它响应是JSON。然后它会为你解析它。

$.post()

如果要返回整行,则应为:

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

和JS应该是这样的:

echo json_encode($row);

答案 1 :(得分:0)

刚刚开始工作,这是解决方案,它完美无缺。我不得不将数据声明为序列化数组。

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