看到这个ajax函数调用有什么问题?

时间:2010-12-29 23:28:11

标签: jquery ajax

这是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的网址如下: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 个答案:

答案 0 :(得分:1)

您的代码提示未定义,因为您没有从ajaxCall()函数返回任何内容,也不能在您使用异步服务器调用时返回。在alert()运行很久之后,在从服务器加载数据后运行回调函数。尝试提醒里面的回调函数,如下所示:

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

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

        }, "json");
    }

同样重要的是要注意,当您返回parseInt(data.price))时,您不在ajaxCall范围内,因此它根本不会返回任何警报。有一种方法可以在jQuery的服务器调用中关闭async,但这是不可取的。相反,正如我上面所做的那样,考虑将数据处理逻辑放在回调函数中。

如果你已经死机拥有全功能的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");
}

答案 1 :(得分:0)

当HTTP响应到达时,回调(function(data){return parseInt(data.price);})称为

你必须在回调中做你想做的事情,你不能从它返回任何东西。

答案 2 :(得分:0)

请尝试使用此模式:

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

如果坚持使用单独的ajax函数,该函数保证返回一个值,则必须包含一些 synchronized yuckery,例如:

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;
}