Jquery Asenkron Sorunu
-
<script type="text/javascript"> $(function() { var selected_filter_height = $( document ).height() / 3; $("#selected_filters").css("height", selected_filter_height + "px"); var viewer = OpenSeadragon({ id: "openseadragon1", prefixUrl: "images/openseadragon/", showNavigator: true, navigatorPosition: "BOTTOM_RIGHT", tileSources: '/fcgi-bin/iipsrv.fcgi?Deepzoom=<?=$plink?>.jp2.dzi', crossOriginPolicy: 'Anonymous' }); var viewportHeight = $(window).height() - $(".headerbar").height(); $("#openseadragon1").css("height", viewportHeight); setTimeout(function() { $.ajax({ url : "handlers/H_AnnotationHandler.php", data : "case_id=<?=$case_id?>&plink=<?=$plink?>&mode=get", type : "post", dataType : "json", success : function (response) { if (!response.error) { for (var i = 0; i < response.annots.length; i++) { var elt = document.createElement("div"); elt.id = "runtime-overlay" + i; elt.className = "highlight"; viewer.addOverlay({ element: elt, location : viewer.viewport.imageToViewportRectangle(parseInt(response.annots[i].rect_x), parseInt(response.annots[i].rect_y), parseInt(response.annots[i].rect_w), parseInt(response.annots[i].rect_h)) }); } } } }); }, 3000); selection =viewer.selection({ onSelection: function(rect) { var elt = document.createElement("div"); elt.id = "runtime-overlay"; elt.className = "highlight"; viewer.addOverlay({ element: elt, location: viewer.viewport.imageToViewportRectangle(parseInt(rect.x), parseInt(rect.y), parseInt(rect.width), parseInt(rect.height)) }); input = "rect_x="+rect.x+"&rect_y="+rect.y+"&rect_w="+rect.width+"&rect_h="+rect.height+"&plink=<?=$plink?>&case_id=<?=$case_id?>&mode=add"; $.ajax({ url : "handlers/H_AnnotationHandler.php", data : input, type : "post", dataType : "json", success : function(response) { if (!response.error) alert("success"); else alert("failed"); } }); } });
Bu kod parçasında setTimeout yaptığım ajax call' ı normal çalıştırdığımda çalışmıyor. Çalışmıyordan kastım, viewer.viewport.imageToViewportRectangle değeri saçmasapan birşey geliyor. 4 saatimi yedi, timeout koyunca sorun düzeldi de. Net olarak nasıl çözebilirim ? Neden kaynaklanıyor acaba ?
Not: async : false yapınca da düzelmemişti.
ozgunlu tarafından 12/Oca/16 15:58 tarihinde düzenlenmiştir -
hocam bilemiyorum fayda getirir mi ama for 'u aşağıdaki yapıya getirebilir misin? (ek: setTimeout kullanmana gerek yok)
for (var i = 0; i < 5; i++) { (function(i) { setTimeout(function () { console.log(i); }, i); })(i); }kaynak: https://docs.nodejitsu.com/articles/getting-started/control-flow/how-to-write-asynchronous-code
RockZs tarafından 12/Oca/16 16:54 tarihinde düzenlenmiştir -
RockZs bunu yazdı
hocam bilemiyorum fayda getirir mi ama for 'u aşağıdaki yapıya getirebilir misin? (ek: setTimeout kullanmana gerek yok)
for (var i = 0; i < 5; i++) { (function(i) { setTimeout(function () { console.log(i); }, i); })(i); }kaynak: https://docs.nodejitsu.com/articles/getting-started/control-flow/how-to-write-asynchronous-code
Çalışmadı ne yazık ki hocam, teşekkür ederim yardımcı olmaya çalıştığın için.
Tahminim benim kullandığım OpenSeaDragon geç yükleniyor, ben de "viewer"' ı kullandığımdan oluyor galiba.
var viewer oluşturulmadan diğerini yapma nasıl diyebilirim, bir de öyle denesem ?
undefined olduğu sürece bekletsem ?
-
Öncelikle kodları daha anlaşılabilir bir yere koysan güzel olacak, sitenin editörü oldukça kötü.
Yapmak istediğin şey nedir onu anlayamadım özet olarak anlatabilir misin?
OpenSeaDragon vs. demişsin, o an yaratılmamış olabilir. Callback olayını araştır yani nesne yaratıldıktan sonra bir tetikleme olur o sırada da onunla alakalı işleri yaparsın.
Varsa online çalıştığın örnek onu da atarsın canlı olarak deneyip bakalım.
-
undefined olduğu sürece bekletme fikri denenebilir, bilemiyorum ama ilginç geldi.
callback yapısını öğrenmeye çalış derim, derdinin dermanı orada gibi.. JS kullanıyorsan ve I/O için bekleyen işler varsa callback yapısını öğrenmen gerekebilir.
RockZs tarafından 12/Oca/16 17:39 tarihinde düzenlenmiştir -
Hocam ekranda Openseadragon ile cikarttigim goruntuye anotasyon yapildiginda o anotasyonu diger kullanicilarin da gorebilmeleri icin saklamam gerekiyor ve ekrana vermem. Saklama kisminda sorun yok; ekrana verirken gercek goruntu uzerindeki boyutunu ekran boyutuna convert etmesi gerekiyor bunu da onceden yuklemis oldugu viewer objesi uzerinden yapiyor. Ben 3 saniye bekletmezsem sacmasapan bir conversion yapiyor.
-
<script type="text/javascript"> debugger; /kodların </script>
şeklinde debug edebilirsin.
-
ontedi bunu yazdı
//
şeklinde debug edebilirsin.
js de debug olduğunu bilmiyordum, süper oldu. yarın işte deneyeceğim. teşekkürler
-
bir sürü plugin bişi kullanmışsın ne napıyor anlat önce bi bakalım :|
-
async: false
abi ajaxına şu parametreyi ekleyip denedin mi hiç? -
sLeymN bunu yazdı
async: false
abi ajaxına şu parametreyi ekleyip denedin mi hiç?denedim hocam, yemedi :)
yukarıda anlattım hocam @Cosmic
