-1
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 );
4

2 回答 2

1

您无法访问asinId,等,因为它们是在您传递给方法pUrl的匿名函数范围内定义的。each()

更令人困惑的productDesc是,即使您尝试在所述匿名中访问它,并且是异步的,也可能不是您要查找的值function,这意味着调用后的值不能保证在处理程序完成后分配。getJSONAJAXproductDesc.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 回答