видите что-то не так в этом вызове функции ajax? - PullRequest
0 голосов
/ 30 декабря 2010

вот js

$(document).ready(function() {



        $("#quantity").change(function() 
        {
            hash = $("#quantity").val(); //returns 0001 (ex)
            qPrice_price = ajaxCall(hash);
            alert(qPrice_price);
        });






});


    function ajaxCall(hash)
    {
        $.get("ajax.php", { id: hash },

        function(data)
        {
            return parseInt(data.price);

        }, "json");
    }

ajax.php с таким URL-адресом: ajax.php? Id = 0001 возвращает это {"price": "5"}, когда я выбираю выбор, который яполучить оповещение о неопределенности.

Вот как выглядит HTML

<select id="quantity" name="quantity">
            <option value="0001">250</option>
            <option value="0002">500</option>
            <option selected="selected" value="0003">1,000</option>
            <option value="0004">2,500</option>
            <option value="0005">5,000</option>
            <option value="0006">10,000</option>
            <option value="0007">20,000</option>
            <option value="0008">30,000</option>
            <option value="0009">40,000</option>
            <option value="0010">50,000</option>
            <option value="0011">100,000</option>
            </select>

Ответы [ 3 ]

1 голос
/ 30 декабря 2010

Ваш код оповещения не определен, потому что вы ничего не возвращаете из вашей функции ajaxCall(), как и вы, когда вы используете асинхронный серверный вызов. Ваша функция обратного вызова запускается после загрузки данных с сервера, задолго до того, как ваш alert() запустился. Попробуйте предупредить внутри функцию обратного вызова следующим образом:

function ajaxCall(hash)
    {
        $.get("ajax.php", { id: hash },

        function(data)
        {
            alert(parseInt(data.price));

        }, "json");
    }

Также важно отметить, что когда вы возвращаете parseInt(data.price)), вы не попадаете в область действия ajaxCall, поэтому он ничего не возвращает к вашему предупреждению. Есть способ отключить async в вызовах сервера jQuery, но это не рекомендуется. Вместо этого, как я уже говорил выше, подумайте о том, чтобы поместить свою логику обработки данных в функцию обратного вызова.

Если у вас мертвый набор в том, что у вас есть универсальная функция AJAX (хотя, если честно, это то, что функции JQuery AJAX равны , и на самом деле нет никаких причин вообще чтобы сделать это), вы можете сделать что-то вроде этого:

$(document).ready(function() {
        $("#quantity").change(function() 
        {
            hash = $("#quantity").val(); //returns 0001 (ex)
            qPrice_price = ajaxCall(hash, handleQuantityChange);
            alert(qPrice_price);
        });
});

function handleQuantityChange(data) {
    alert(data);
}

function ajaxCall(hash, callback) {
    $.get("ajax.php", { id: hash }, function(data) {
        callback(parseInt(data.price));
    }, "json");
}
0 голосов
/ 30 декабря 2010

Попробуйте этот шаблон вместо:

    $("#quantity").change(function() 
    {
        var hash = $("#quantity").val(); //returns 0001 (ex)
        $.get("ajax.php", { id: hash },
            function(data)
            {
                doSomething(parseInt(data.price));
            }, "json");
    });

Если вы настаиваете на на использовании отдельной функции ajax, которая гарантированно возвращает значение, вам придется включить некоторые синхронные хулиганства, такие как это:

function ajaxCall(hash)
{
    var rv = null;
    $.ajax({ url: "ajax.php", 
            data: { id: hash },
            async: false,
            dataType: 'json',
            success: function(data)
            {
                rv = parseInt(data.price);
            }
    });
    return rv;
}
0 голосов
/ 30 декабря 2010

Обратный вызов (function(data){return parseInt(data.price);}) называется , когда приходит ответ HTTP .

Вы должны делать то, что вы хотите сделать в обратном вызове, вы не можете ничего от него вернуть.

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