jquery函数访问本地javascript变量

时间:2012-06-07 03:23:26

标签: javascript jquery local-variables

jQuery的新手,并且有一个简单但令人困惑的问题。 HA2。

我正在用jQuery函数读取xml文件来编写这个普通的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;
}

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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

答案 2 :(得分: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 */

})