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 );
質問する
3448 次
2 に答える
1
メソッドに渡した無名関数のスコープ内で定義されているため、、などにasinId
アクセスすることはできません。pUrl
each()
さらに紛らわしいことに、は、非同期で動作してproductDesc
いる上記のanon内でアクセスしようとしても、探している値ではない可能性があります。つまり、 aftercallの値は保証されません。ハンドラーの終了後に割り当てられます。function
getJSON
AJAX
productDesc
.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 に答える