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;
}
答案 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 */
})