Ajax调用给我一个未定义的 - 未定义的错误?

时间:2015-12-26 22:41:33

标签: javascript php jquery

谁能告诉我自己做错了什么?我试图通过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();
}

3 个答案:

答案 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对象上的datadata属性不存在/未定义。

您使用的success对象是AJAX调用的data函数中的参数。你把它当成一个真实的对象......然而在你的AJAX通话中,我没有看到你把它转换为一个的地方。 var blessed = require('blessed'); var screen = blessed.screen({ smartCSR: true }); screen.on('keypress', function(key) { console.log(key); }); 可能只是从PHP返回的一串数据,而不是对象。