【发布时间】:2013-10-15 22:10:36
【问题描述】:
在用户在数量、价格和付款字段中输入数字后,下面的代码块会要求服务器提供调整后的帐户余额。将--10 添加到字段会在服务器上引发错误。这就是为什么我添加了 NaN 检查adjustment === adjustment。这样,它应该只在调整量是数字时才发送请求。但由于某种原因,我仍然收到一些奇怪的东西被发送到服务器,比如--10...
本质上,我只需要在请求实际上是一个数字时发送它。
var quantity = $("#id_quantity").val();
var price = $("#id_price").val();
var payment = $("#id_payment_amount").val();
var adjustment = quantity * price - payment;
// Don't send if Not a number (NaN).
if (adjustment === adjustment) {
$.get("/balance_after_adjustment", {amount: adjustment}, function(response) {
$("span").text(response);
});
}
【问题讨论】:
-
您将值作为字符串获取,然后对它们进行数学计算。我建议使用
parseFloat或parseInt单独解析每个项目,这样您可以在尝试对其进行任何计算之前先获得好的数字。 -
不过,不要忘记在服务器端测试
amount。否则一些“黑客”可能会克服 Javascript 检查。 -
@JoeEnos 我看不出这会如何改变任何事情。无论如何,运算符都会隐式转换为数字。而且我不会在用户输入上使用
parse函数;一元+运算符或Number()函数更有意义 -
@JoeEnos 我绝对同意你的最后一条评论——你没有提到测试每一个并报告任何失败,我不确定这是否是 OP 想要的......尽管如此,一个很好的建议。我的另一点是
parse函数忽略任何尾随的非数字字符,而一元+运算符和Number()(它们做同样的事情)不会。在处理用户输入时,可能需要也可能不需要忽略尾随字符,但我想指出这一点。我想不出很多/任何场景应该使用parse函数而不是+
标签: javascript ajax jquery nan