jQuery('ol.productList li.product input[name*="cart.pAsin."]').load().each(function(){ // each function
var asinId = jQuery(this).val();
var pUrl = jQuery(this).siblings("a").attr('href');
var imgPath = jQuery(this).siblings("a").children('img').attr('src');
var productTitle = jQuery(this).siblings("div.productDetails").children('h4.title').text();
var descUrl = '/api/product/asin/' + asinId;
var productDesc = '';
jQuery.getJSON(descUrl, function(data) {
var attr = data.attributes[1];
productDesc = attr.productDescription;
var allinfo = [];
allinfo.push(asinId,productTitle,productDesc,pUrl,imgPath);
alert(allinfo[0]);
});
});
alert('Asin id :'+ asinId + ' Product Url : '+ pUrl + ' Image Path : ' +imgPath + ' Product Titl : '+productTitle+ ' Product Discription : ' +productDesc );
问问题
3448 次
2 回答
1
您无法访问asinId
,等,因为它们是在您传递给方法pUrl
的匿名函数范围内定义的。each()
更令人困惑的productDesc
是,即使您尝试在所述匿名中访问它,并且是异步的,也可能不是您要查找的值function
,这意味着调用后的值不能保证在处理程序完成后分配。getJSON
AJAX
productDesc
.getJSON
.getJSON
您可以在方法之外定义 asinId 等each()
,然后它将在 anon 函数范围之外可用:
var asinId = jQuery(this).val();
var pUrl = jQuery(this).siblings("a").attr('href');
var imgPath = jQuery(this).siblings("a").children('img').attr('src');
var productTitle = jQuery(this).siblings("div.productDetails").children('h4.title').text();
var descUrl = '/api/product/asin/' + asinId;
var productDesc = '';
jQuery('ol.productList li.product input[name*="cart.pAsin."]').load().each(function(){ // each function
asinId = jQuery(this).val(); // notice this is without var keyword
// rest of your code
});
alert('Asin id :'+ asinId + ' Product Url : '+ pUrl + ' Image Path : ' +imgPath + ' Product Titl : '+productTitle+ ' Product Discription : ' +productDesc );
于 2012-04-11T09:41:55.920 回答
0
只需在 each() 的匿名函数范围之外定义它们,如下所示:
var asinId = null;
var pUrl = null;
...
jQuery('ol.productList li.product input[name*="cart.pAsin."]').load().each(function(){ // each function
asinId = jQuery(this).val();
pUrl = jQuery(this).siblings("a").attr('href');
...
您现在可以从外部访问它们,因为它们现在属于全局范围。
于 2012-08-28T12:57:50.390 回答