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 );
答案 0 :(得分:1)
您无法访问asinId
,pUrl
等,因为它们是在您传递给each()
方法的匿名函数范围内定义的。
即使您要查找的内容更加令人困惑,productDesc
也可能不是您正在寻找的价值,即使您尝试在function
内访问getJSON
,AJAX
也是如此在productDesc
下运行并且是异步的,这意味着在.getJSON
处理程序完成后无法保证在.getJSON
调用之后each()
的值。
您可以从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 );
方法中定义asinId等,然后它将在anon函数范围之外可用:
{{1}}
答案 1 :(得分: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');
...
您现在可以从外部访问它们,因为它们现在属于全局范围。