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

Antwort

1

Sie nicht asinId zugreifen können, pUrl, usw., wie sie im Rahmen der anonymen Funktion definiert werden Sie each() Methode übergeben.

Um noch verwirrender Erschwerend kommt, könnte der productDesc nicht auch der Wert sein, die Sie suchen, auch wenn Sie es innerhalb dieser Anon function als getJSON arbeitet unter AJAX zuzugreifen versuchen, und ist asynchron, was bedeutet, den Wert productDesc nach .getJSON Anruf kann nicht garantiert werden zugewiesen nach .getJSON Handler beendet.

Sie könnten definieren asinId etc aus dem each() Methode und dann wird es außerhalb der Anon Funktionsumfang zur Verfügung:

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

einfach definieren sie nicht in den Anwendungsbereich des jeweiligen() 's anonyme Funktion wie this:

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

Sie können jetzt von außen auf sie zugreifen, da sie jetzt zum globalen Bereich gehören.

Verwandte Themen