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