Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery函数访问本地javascript变量_Javascript_Jquery_Local Variables - Fatal编程技术网

jquery函数访问本地javascript变量

jquery函数访问本地javascript变量,javascript,jquery,local-variables,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",

不熟悉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;
}

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

这是因为
$。ajax
是异步执行的

这是您学习如何使用
$的绝佳机会。延迟

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

下面是一个关于JSFIDLE的示例:

您可以按照@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 */

})

好极了但是你为什么在
getPrice()
中留下
var prodPrice=0
语句?@Ryan Fernandes:实际上我不明白它的作用是什么:-S所以得到一些一般性的答案PS:还添加了一个example@Ryan费尔南德斯:如果你喜欢我建议你看这篇文章的承诺,那就太令人惊讶了。是的,它是有效的。我可以调用函数getPrice。与@zerkms示例一样,浏览器不断弹出未定义的getPrice函数。这两个示例之间有什么区别?“@zerkms”的示例使用了在1.5()版本中实现的延迟。我的示例更常见,使用匿名函数调用函数“getPrice”。您必须知道这两者都是异步的,因为您使用$.ajaxasynchronously@PapaShop在发生在您身上的示例中,“zerkms”使用的是1.6()版本中的方法“pipe”。您必须查看jQuery的使用版本。您可以在不使用方法“pipe”的情况下使用它,下面是一个基于“zerkms”代码的示例: