2012-04-11 80 views
-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); 

回答

1

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

甚至使问题变得更加混乱,productDesc可能不是也是你正在寻找的价值,即使你尝试上述匿名function作为getJSON运行中访问它AJAX下是异步的,也就是说价值productDesc.getJSON处理程序完成后,不能保证呼叫将被分配。

您可以定义asinId等出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); 
0

简单地定义他们每个()的匿名函数的类的范围之外这样的:

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'); 
... 

现在,您可以从外部访问他们,因为他们现在属于全局范围。