AJAX возвращение показывает НАН - PullRequest
1 голос
/ 23 декабря 2010

проблема, с которой я сталкиваюсь, это прежде всего у меня есть страница с именем ajax.php, которая с этим URL ajax.php? Id = 0001 возвращает

{"value":250,"price":"5"}

это часть jquery

$(document).ready(function() {


    //field variables

    var quantity = $("#quantity").val();
    var price = $("#pricing p.pps span").text();

    //onload display default data.
    $.get("ajax.php", { id: quantity }, function(data) { $("#pricing p.pps span").html(data.price); }, "json");



    //quantity select
    $("#quantity").change(
    function() 
    { 
        $.get("ajax.php", { id: quantity }, 
            function(data) 
            {
                total = parseInt(price) + parseInt(data.price);
                $("#pricing p.pps span").html(total);       
            }, "json");
    });

});

когда страница загружается, ценовой диапазон получает выводимое значение.но когда я выбираю выбор количества, ценовой диапазон получает значение нан.кто-нибудь может понять почему?

Ответы [ 3 ]

2 голосов
/ 23 декабря 2010

Ваша price переменная оценивается перед выполнением любого вызова ajax.каково значение price сразу после этой строки:

var price = $("#pricing p.pps span").text();

если это не число, то вызов parseInt(price) вернет NaN

, вам следует установить price var в обратном вызове первого ajax get:

var price = 0;
$.get("ajax.php", { id: quantity }, function(data) { 
    $("#pricing p.pps span").html(data.price); 
    price = data.price;
}, "json");
0 голосов
/ 23 декабря 2010

С кодом может быть две проблемы. Во-первых, значение price из строки $("#pricing p.pps span").text() может не быть числом, поэтому parseInt(price) может возвращать NaN.

Во-вторых, data.price, поступающий из запроса ajax, может быть недействительным числом, поэтому снова parseInt (data.price) может вернуть NaN.

Лучший способ решить эту проблему - сохранить предупреждение типа

alert("price: " + price + ", data.price: " + data.price)

перед строкой

total = parseInt(price) + parseInt(data.price);

Основная проблема в том, что значение price устанавливается перед первым вызовом ajax, что означает, что значение цены - пустая строка, я думаю. Вы должны обновить первый вызов ajax как

var price = 0;
$.get("ajax.php", { 
    id: quantity 
}, function(data) { 
    $("#pricing p.pps span").html(data.price); 
    price = parseInt(data.price)
}, "json");

Тогда вы можете использовать его как

total = price + parseInt(data.price);

Еще одна вещь, которую нужно иметь в виду, это параметр radix при работе с методом parstInt(). Это система счисления, используемая для синтаксического анализа строки, такая как hexa, octa и т. Д. Если вы пропустите этот параметр, parseInt может вернуть неожиданные результаты, если строка начинается с 0 или 0x. ссылка

0 голосов
/ 23 декабря 2010

Я думаю, что проблема вызвана этой частью: total = parseInt (цена) + parseInt (data.price);

"цена" не определена в функции обратного вызова ajax,Вам нужно определить его и дать ему значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...