Ajax 调用给了我一个未定义 - 未定义的错误
Ajax call giving me an undefined - undefined error?
谁能告诉我我做错了什么?我正在尝试通过 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
对象上的billName
和billAmount
属性不存在/未定义。
您使用的data
对象是 AJAX 调用的success
函数中的参数。你把它当作一个实际的物体...然而在您的 AJAX 调用中,我没有看到您将其转换为 A。 data
可能只是从 PHP 返回的一串数据,而不是一个对象。
- 同一项怎么可能在一个实例中未定义,却在另一个实例上定义
- DOM导航-上一个同级未定义
- $.每个jquery循环打印一个“;未定义的“;对于getJSON请求后的每个元素,网格数据都会完美地打印出来
- 为什么我得到了一个“;未定义的“;使用“”从Find()返回值;这个“;论点
- 变量转换为另一个“未定义”的变量
- getDataAsJSON()在PHP中是一个未定义的函数,但许多解释如何使用JSONP的网站都说要使用它
- 反应.js:未捕获类型错误:未定义不是一个函数
- jQuery onclick 函数:未定义不是一个函数
- JS在隐藏未定义的值后仅从数组中返回第一个id的值
- 所以这是说我的法定对象中有一个未定义的变量
- 未定义不是一个函数,谷歌地理定位
- 谷歌URL缩短器API-未压缩类型错误:未定义不是一个函数
- 为什么在这个数组的末尾会有一个未定义的
- 从一个函数传递到另一个函数的变量在使用jQuery的.post之后变得未定义
- JSON.parse给出了一个“;未定义的“;对象
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 使用while循环在printArray函数中获取一个额外的未定义值
- 为什么我得到一个未定义的回报
- Argument Controller不是一个函数,未定义-一个页面中有两个Angular应用程序
- 尝试执行两个函数递归时,未定义一个函数