我有这个代码工作得很好,除了它将发布来自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?
答案 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");
});