jquery函数访问本地javascript变量
不熟悉jQuery,有简单但容易混淆的问题。ha2 我用jQuery函数读取xml文件来编写这个普通javascript函数。如何为顶部声明的prodPrice变量赋值?脚本不断返回0值,但如果我在jQuery函数中警告该值,我会设法获得所需的值 谢谢你们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",
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”代码的示例: