谁能告诉我自己做错了什么?我试图通过Ajax更新页面,以便在用户提交表单时,使用新数据更新页面。现在,它成功地将数据插入到数据库中,但是我得到了一个未定义的 - 未定义的"我试图附加新数据的声明。有什么帮助吗?
HTML:
<form method="post" name="addBillForm">
<input type="text" placeholder="Enter bill name" name="billName" class="billName">
<input type="text" placeholder="Enter bill amount" name="billAmount" class="billAmount">
<input type="submit" value="Submit" name="addBillForm" class="addBill">
</form>
JavaScript的:
$(".addBill").on("click", function(e) {
e.preventDefault();
var billAmount = $('.billAmount').val();
var billName = $('.billName').val();
$.ajax({
type: "POST",
url: "index.php",
data: {
bill_amount: billAmount,
bill_name: billName,
action: 'addBill'
},
success: function(data) {
$("#bills").append("<p>" + data.billName + "-" + data.billAmount + "</p>");
}
});
});
PHP:
if (@$_POST['action'] == 'addBill')
{
$billName = $_POST['bill_name'];
$billAmount = intval($_POST['bill_amount']);
$data = array(
'billName' => $billName,
'billAmount' => $billAmount,
);
echo json_encode($data);
$stmt = $db->prepare("INSERT INTO bills (billName, billAmount) VALUES(?,?)");
$stmt->bindParam(1, $billName);
$stmt->bindParam(2, $billAmount);
$stmt->execute();
}
答案 0 :(得分:1)
尝试
$("#bills").append("<p>" + (data.billName - data.billAmount) + "</p>");
在您的减法操作周围没有( )
,Javscript将首先执行"<p>" + date.billName
,从而产生一个字符串。然后它会做(string) - data.billAmount
即NaN。添加( )
强制Javascript在进行字符串连接之前进行减法。
答案 1 :(得分:0)
您是否尝试从字符串(帐单名称)中减去一个数字(帐单金额)?如果是这样,这将导致JavaScript中的特殊NaN
值。如果您只是想显示帐单名称,后跟连字符,然后是帐单金额,请尝试以下操作:
$("#bills").append("<p>" + data.billName + "-" + data.billAmount + "</p>");
答案 2 :(得分:0)
在JS中,"<p>" + data.billName - data.billAmount + "</p>"
用于连接字符串和数学运算。
那么当你在同一个声明中做两件事时会发生什么?好吧,它从左边开始,一直向右。
所以... var a = "<p>" + data.billName; // string + number coerces the number to a string and concats
var b = a - data.billAmount; // ends up NaN because string minus number is no-go
var c = b + "</p>"; // NaN because any math with NaN equals NaN
可以被认为类似于:
"<p>" + data.billName - data.billAmount + "</p>"
因此NaN
的结果是"<p>" + (data.billName-data.billAmount) + "</p>"
尝试在数学部分周围添加括号以使其优先。
"undefined - undefined"
这样数学将首先发生,然后结果数字将被强制转换为字符串并与其他字符串连接......我非常确定你想要的是什么。
编辑 - 我觉得你的意思是你实际上意味着减号,实际上只是一个带有连字符的字符串。您现在正在获得一个billName
字符串作为最终结果。
您的编辑完全改变了问题,使大多数答案回答了与现在显示的完全不同的内容。在将来出现这种情况时,您可能希望将其作为一个新问题。
...但是因为我们已经在这里......这表明billAmount
对象上的data
和data
属性不存在/未定义。
您使用的success
对象是AJAX调用的data
函数中的参数。你把它当成一个真实的对象......然而在你的AJAX通话中,我没有看到你把它转换为一个的地方。 var blessed = require('blessed');
var screen = blessed.screen({
smartCSR: true
});
screen.on('keypress', function(key) {
console.log(key);
});
可能只是从PHP返回的一串数据,而不是对象。