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

Ajax call giving me an undefined - undefined error?

本文关键字:未定义 一个 错误 调用 Ajax      更新时间:2023-09-26

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

尝试

$("#bills").append("<p>" + (data.billName - data.billAmount) + "</p>");

如果没有减法运算周围的( ),Javscript 将首先执行"<p>" + date.billName,从而生成一个字符串。 然后它会做(string) - data.billAmount哪个是 NaN。 添加( )会强制 Javascript 在执行字符串连接之前执行减法。

您是否正在尝试从字符串(账单名称(中减去一个数字(账单金额(?如果是这样,这将导致 JavaScript 中的特殊NaN值。如果您只是尝试显示账单名称,后跟连字符,后跟账单金额,请尝试以下操作:

$("#bills").append("<p>" + data.billName + "-" + data.billAmount + "</p>");

在 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"作为最终结果。

您的编辑完全改变了问题,使大多数答案回答的内容与现在显示的内容完全不同。将来在这种情况下,您可能希望将其作为一个新问题来做。

。但既然我们已经在这里了...这表示 data 对象上的billNamebillAmount属性不存在/未定义。

您使用的data对象是 AJAX 调用的success函数中的参数。你把它当作一个实际的物体...然而在您的 AJAX 调用中,我没有看到您将其转换为 A。 data可能只是从 PHP 返回的一串数据,而不是一个对象。