2

jQuery 新手,遇到简单但令人困惑的问题。哈2。

我正在使用读取 xml 文件的 jQuery 函数编写这个普通的 javascript 函数。如何为顶部声明的 prodPrice 变量赋值?脚本不断返回 0 值,但如果我在 jQuery 函数中提醒该值,我设法获得了我想要的值。

感谢你们。

function getPrice(valprodID)
{
    var prodPrice=0;

    jQuery.ajax({
        type: "GET",
        url: "products.xml",
        dataType : "xml",
        success : function(xml)
        {
            jQuery(xml).find('prod').each(function(){
                var prodID = jQuery(this).find('prodID').text();
                if(prodID == valprodID)
                {
                    prodPrice = jQuery(this).find('prodPrice').text(); 
                    return false;
                }
            });                
        }
    })

    return prodPrice;
}
4

3 回答 3

2

那是因为$.ajax是异步执行的。

这是一个很好的机会让你学习如何使用$.Deferred

function getPrice(valprodID)
{
    var prodPrice=0;

    return jQuery.ajax({
        type: "GET",
        url: "products.xml",
        dataType : "xml"
    }).pipe(function(xml)
        {
            jQuery(xml).find('prod').each(function(){
                var prodID = jQuery(this).find('prodID').text();
                if(prodID == valprodID)
                {
                    return jQuery(this).find('prodPrice').text(); 
                }
            });                
        });
}

现在你getPrice()以这种方式调用你的函数:

getPrice(someid).done(function(prodPrice) {
    // do what you need with prodPrice 
});

这是关于 jsfiddle 的示例:http: //jsfiddle.net/zerkms/9MgsX/1/

于 2012-06-07T03:28:04.063 回答
0

您可以按照@xdazz 的报告进行异步操作,正如@zerkms 用延迟或匿名函数指示的那样:

function getPrice(valprodID, fn)
{
    var prodPrice=0;
    jQuery.ajax({
        type: "GET",
        url: "products.xml",
        dataType : "xml",
        success : function(xml)
        {
            jQuery(xml).find('prod').each(function(){
                var prodID = jQuery(this).find('prodID').text();
                if(prodID == valprodID)
                {
                    prodPrice = jQuery(this).find('prodPrice').text(); 
                    fn(prodPrice);
                }
            });                
        }
    })

}

getPrice(1, function(prodPrice) {

   /* your code */

})
于 2012-06-07T03:48:23.703 回答
0

您需要将async选项设置为false,或者您应该在回调函数中完成您的工作。

于 2012-06-07T03:27:42.740 回答