2013-10-08 2 views
0

Ниже блок кода запрашивает у сервера скорректированный остаток на счете после ввода пользователем количества в поля количества, цены и оплаты. Добавление --10 к полю приведет к ошибке на сервере. Вот почему я добавил проверку NaN adjustment === adjustment. Таким образом, он должен отправлять запрос только в том случае, если сумма корректировки является числом. По какой-то причине, однако, я все еще получаю странные вещи, отправляемые на сервер, такие как --10 ...Тестирование Javascript для NaN

По сути, мне нужно отправить запрос только в том случае, если это фактически номер.

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); 
     }); 
    } 
+2

'IsNaN() ': https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN и' Number.isNaN() ': https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN – Ian

+1

Вы получаете значения как строки, а затем выполняете математический расчет на них. Я бы предложил разбор каждого элемента индивидуально с помощью 'parseFloat' или' parseInt', таким образом вы получите хорошие номера сначала, прежде чем пытаться делать какие-либо вычисления на них. –

+0

Тем не менее, не забудьте проверить 'amount' на стороне сервера. В противном случае некоторый «хакер» может преодолеть проверку Javascript. – Alex

ответ

1

я бы, вероятно, попробовать что-то вроде этого

var quantity = parseInt($("#id_quantity").val(),10), 
price = parseInt($("#id_price").val(),10), 
payment = parseInt($("#id_payment_amount").val(),10), 
adjustment = quantity * price - payment; 
if (!isNaN(adjustment)) { 
    $.get("/balance_after_adjustment", {amount: adjustment}, function(response) { 
     $("span").text(response); 
    }); 
} 
+1

Не существует метода isNaN(). – epascarello

+0

К сожалению, опечатка исправлена, хотя –

+2

после 20 правки, вы поняли это правильно. – epascarello

-1

поставить + перед оператором, так что строка, возвращаемая методом val будет отлиты в виде целого числа

var quantity = +$("#id_quantity").val(), 
    price = +$("#id_price").val(), 
    payment = +$("#id_payment_amount").val();