ajax

2016-04-12 23 views
0
ajax gelen değeri döndürmek gerekir

değeri döndürmek gerekir ama 0 her zaman dolu ve bitmiş ajax işlemi için beklemedi küresel değer olarak var itemId=0;ajax

getitemIDbyProductID(productId,getitemIDbyProductID_success);    
       alert(itemID + "itemgeted") 

Bu

yaptı
function getitemIDbyProductID(productId, callback) { 
      $.ajax({ 
       type: "POST", 
       url: "Cot.aspx/getitemIDbyProductID", 
       data: JSON.stringify({ productId: productId }), 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (result) { 
        var value = 0; 
        value = JSON.parse(result.d); 
        itemID=callback(value) 
        callback(value); 
       }, 
       error: function (msg) { } 
      }); 
     } 

     function getitemIDbyProductID_success(total_percentage) {  
       alert(total_percentage +"fds"+itemID); 
     } 

ama bitmiş ajax bekleyin ve bana itemID verir vermedi = undefiend

+0

yalnızca itemId değerini almaya çalışırken umutsuz :(, ne yapmalıyım? –

+0

Başlığın başından varsayıldım [bu bir eşzamansız çağrının yanıtını nasıl döndürürüm?] (Http: // stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) (Hala olabileceğini düşünüyorum), ama tam olarak neyin sorun olduğunu anlamakta zorlanıyorum, çünkü Bir şey 'geri', ve bir geri arama kullanıyor gibi görünüyorsunuz, ama bir değer * bunun yerine bir değer * geçirerek * Ajax başarı işlevinizi (?) içinde * ayarlamak * için kullanabilirsiniz. – apsillers

cevap

1

başarıyla burada değeri belirliyoruz:

function getitemIDbyProductID_success(total_percentage) { 
    itemID = total_percentage; 
    alert(total_percentage +"fds"+itemID); 
} 

Ama sonra bu çağrıları kodda başarıyla tekrar bunu kuruyorsun: getitemIDbyProductID_success şey dönmez senin yana

itemID=callback(value) 

, dönüş değeri undefined olduğunu . Yani temelde, ayarladıktan sonra itemIDhemen'u görmezden geliyorsunuz.

Sadece onun (non-kaybolmamış) dönüş değeri kullanmayın, geri arama çağırmak:

callback(value); 

Ayrıca , bu ne düşündüğünüzü yapacaksın değildir:

getitemIDbyProductID(productId,getitemIDbyProductID_success);    
alert(itemID + "itemgeted"); 

getitemIDbyProductID, asenkron işlemini gerçekleştirdiği için. Yukarıdaki hatalar düzeltildikten sonra bile, bu hata devam eder. Ve bu bir çok popüler sorusunun bir kopyasını (sağladığımdan çok daha iyi cevaplarla) here.

0

Böyle bir şey yapabilirsiniz:

getitemIDbyProductID(productId,function(val){ 
    itemID = val; 
    alert(itemID + "itemgeted"); 
}); 

Temel olarak, itemID doğru değeri atanır önce beklemek zorunda.