-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アクセスすることはできません。pUrleach()

さらに紛らわしいことに、は、非同期で動作してproductDescいる上記のanon内でアクセスしようとしても、探している値ではない可能性があります。つまり、 aftercallの値は保証されません。ハンドラーの終了後に割り当てられます。functiongetJSONAJAXproductDesc.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 に答える