Post Sync Yapamaz Mıyız
-
Hocalarım şöyle bir sorunum var. Şimdi bir sorgum var. Örneğin Select * from Arabalar gibisinden daha sonra arabanın özelliğini de başka bir post ile çektiğimizi düşünün. Select * from Ozellikler where Araba gibisinden. Şimdi yapı şöyle oluyor.
$.post("..",{},function(Arabalar){ for(var i in Arabalar) { $.post("..",{},function(Ozellikler){ for(var x in Ozelliklr) { console.log(i+".Araba özelliği "+Ozellikler); } }); } });Böyle olunca Hep Son Araba ID sini getiriyor bana..... yani i hep en sonda kalıyor. $.post mantığı sanırım Javadaki ASync mantığında çalışıyor Ben bunu Sync nasıl yapabilirim yada ne gibi bir yol izlemem gerekiyor ? Başka alternatif var mıdır ?
Şunu biliyorum;
Post'una where koşulu ekle tek tablo şek veriyi öyle işle gibisinden. Bana bu lazım değil ben post'u for döngüsünde SYNC mantığında nasıl çalıştırabilirim onu soruyorum...
Cevaplar için teşekkürler şimdiden Bulamadım da gavur kaynaklarda :/
Mod not. Kodun anlaşılır hale gelmesi için ilgili tagler kaldırıldı. -
Mod Cevap ; Tagleri nasıl kaldırıyoruz hocam ? öyle yapalım artık bizde bari nasıl yaptığını söyleyeydin :/
-
MhmdAlmz bunu yazdı
Mod Cevap ; Tagleri nasıl kaldırıyoruz hocam ? öyle yapalım artık bizde bari nasıl yaptığını söyleyeydin :/

Aşağıdaki yerden kaldırıyor eklerken ona göre ekle kodunda varsa tag'i ekleme.
Sorununa gelirsek;
Chrome Developer Tools'tan Network kısmına baktın mı hangi istekleri atıyor?
-
pSkpt bunu yazdıMhmdAlmz bunu yazdı
Mod Cevap ; Tagleri nasıl kaldırıyoruz hocam ? öyle yapalım artık bizde bari nasıl yaptığını söyleyeydin :/

Aşağıdaki yerden kaldırıyor eklerken ona göre ekle kodunda varsa tag'i ekleme.
Sorununa gelirsek;
Chrome Developer Tools'tan Network kısmına baktın mı hangi istekleri atıyor?
Isteklerde sıkıntı yok yani gönderilen ID ler normal post'un mantığına uygun yani . POST methodunun verdiği cevap ASYNC olduğu için for döngüsünü beklemiyor. Yani benim post methodu gerçekleştirdikten sonra function methodunun çalışmasını ve daha sonra function methodunun altındaki kodların çalışmasını istiyorum. Fakat bi türlü beceremedim. Interval verme gibi saçma sapan şeyler bile denedim :D Olmadı yemedi.
Yani bana For döngüsünün içine yazdığım post methodunun sırası ile gerçekleşmesi lazım.Yani ASYNC Olamaması lazım SYNC Olması lazım eşzamanlı çalışırsa sorunum düzelmiş oluyor aksi halde for döngüsündeki i değeri sürekli arttığı için haliyle son i değerini alıyor posttan sonra -
Async olmasıyla ilgisi yok gibime geliyor.
$.ajax({ url : "", data : {"data" : "data"}, type : "post", dataType : "json", async : false, success : function(response) { // sonuca göre ne yapılacağı } });Edit : Son yazdığın cevabı yeni gördüm; javascript normal programlama mantığı ile çalışmaz, asenkron bir yapıya sahiptir ve senin yazdığın fonksiyon "callback" dir. Yani tüm yanıt geldikten sonra ne yapacağıdır. Bu durumda, en içteki for' un içine yarım datayla girmesi mümkün değildir. Dışardaki for' un içindeki her post' da asenkron davranır. Yani for' a bağlayamazsın bu yapıyı. Farklı bir çözüme gitmen gerekir. Bağlarsan da sıralı gelmesini bekleyemezsin. Hepsinin cevap süresine göre callback olurlar ve sırasız da gelebilir, sıralı da.
ozgunlu tarafından 03/Eyl/16 22:29 tarihinde düzenlenmiştir -
normalde dediğin doğru asenkron çalıştığı için global değişkenlerde falan sıkıntı yaratabilen bir olay fakat senin kodda bir sıkıntı olmaması lazım içiçe çalışıyorsun çünkü aşağıya girmesi lazım o kodun.
Normalde o bekleme işleminide post'a callback koyarak hallediyorsun .load işleminde vs.'de aynı mevzu vardır.
$.ajax(url, { data: { comment: text }, type: "POST", async: false, beforeSend: function() { alert("before send"); }, error: function() { alert("error"); }, success: function(data) { alert(data); } });ajax içerisinde async false yapabiliyoruz
-
@ozgunlu anladım abi o zaman Direkt olarak tek post kullanmaya kafa yormam lazım. Bu gibi sorunlarda tek posttan başka alternatif yok galiba. For içine yaptığımız her post methodu ASYNC davranıyor ise dediğin gibi callback süreleri değişir. QEUQEU gibi bir diziliş olsa gene ordan POST ettirdiğim ID yi yakalarım. ama bu seferden örnek veriyorum document.appendChild kullanıyorsam hep son div'e elementler eklenir alayı. Kaldık mı öyle :D Sorunu çözdüm zaten yapımı da tek post'a çektim de kafama takıldı acaba yanlış birşeyler mi yapıyorum gibisinden teşekkürler cevap için :) Ben web'in ASYNC davranacağını düşünemedim bütün işlemler SYNC diye yazıyordum artık ona göre davranayım :/
@FCN deneyeyim hocam yöntemi async false gibi bir özelliğinin olduğunu bilmiyodum teşekkürler :)
-
MhmdAlmz bunu yazdı
@ozgunlu anladım abi o zaman Direkt olarak tek post kullanmaya kafa yormam lazım. Bu gibi sorunlarda tek posttan başka alternatif yok galiba. For içine yaptığımız her post methodu ASYNC davranıyor ise dediğin gibi callback süreleri değişir. QEUQEU gibi bir diziliş olsa gene ordan POST ettirdiğim ID yi yakalarım. ama bu seferden örnek veriyorum document.appendChild kullanıyorsam hep son div'e elementler eklenir alayı. Kaldık mı öyle :D Sorunu çözdüm zaten yapımı da tek post'a çektim de kafama takıldı acaba yanlış birşeyler mi yapıyorum gibisinden teşekkürler cevap için :) Ben web'in ASYNC davranacağını düşünemedim bütün işlemler SYNC diye yazıyordum artık ona göre davranayım :/
@FCN deneyeyim hocam yöntemi async false gibi bir özelliğinin olduğunu bilmiyodum teşekkürler :)
senkronize etmek istersen async parametresini false gönderebilirsin. Aklında bulunsun.
Nodejs' e başlarsan, orada da aynı şeyden çok başın ağrır :)
-
"Arabalar" değişkenini array olarak düşünerek yazıyorum.
var arabalar = [1,2,3,4,5,6,7]; function fetchArabalar(arabalar){ var i = arabalar.shift(); $.get("http://www.tahribat.com/img/Asset/forum2.png?id="+i,{},function(Ozellikler){ //for(var x in Ozelliklr) //{ // console.log(i+".Araba özelliği "+Ozellikler); //} fetchArabalar(arabalar); }); } fetchArabalar(arabalar);jaŞöyle bir şey yaptığında array'i fonksiyon içerisine yolluyorsun.
Array'in ilk değerini alıyor ve onu array'den siliyor.
O değer ile gerekli post/get işlemini yapıyorsun.
Ajax'tan gelen veriyi for'larsın, işlersin orası sana kalmış.
Veri geldikten ve işledikten sonra yine aynı fonksiyonumu çağırıyorum. Not : array'deki 1. verim silindi.
Bu şekilde id'si 1 olan işlem bittikten sonra tekrar arrayı yollayıp onunda 1.sini alacaktır. (yani id=2 oldu)
-
ozgunlu bunu yazdıMhmdAlmz bunu yazdı
@ozgunlu anladım abi o zaman Direkt olarak tek post kullanmaya kafa yormam lazım. Bu gibi sorunlarda tek posttan başka alternatif yok galiba. For içine yaptığımız her post methodu ASYNC davranıyor ise dediğin gibi callback süreleri değişir. QEUQEU gibi bir diziliş olsa gene ordan POST ettirdiğim ID yi yakalarım. ama bu seferden örnek veriyorum document.appendChild kullanıyorsam hep son div'e elementler eklenir alayı. Kaldık mı öyle :D Sorunu çözdüm zaten yapımı da tek post'a çektim de kafama takıldı acaba yanlış birşeyler mi yapıyorum gibisinden teşekkürler cevap için :) Ben web'in ASYNC davranacağını düşünemedim bütün işlemler SYNC diye yazıyordum artık ona göre davranayım :/
@FCN deneyeyim hocam yöntemi async false gibi bir özelliğinin olduğunu bilmiyodum teşekkürler :)
senkronize etmek istersen async parametresini false gönderebilirsin. Aklında bulunsun.
Nodejs' e başlarsan, orada da aynı şeyden çok başın ağrır :)
Socket.io , express , routes falan kullanıyorum bile :D Zaten Async veya Sync işlem yapıyordum Database işlemlerine callback'ler ASYNC çalışıyor
//Ornek 1 var result = database.query("SELECT * FROM Deneme"); console.log("query"); console.log("query Sonuc"); //Ornek 2 database.query("SELECT * FROM Deneme", function(err,row) { console.log("query"); }); console.log("query Sonuc");Çıktı şöyle ; Ornek1
query
query Sonuc
Çıktı şöyle ; Ornek2
query Sonuc
query
gibi gibi..... daha iyi oldu ama bunu öğrendiğim ben sadece Java C# falan gibi masaüstünde vs var sanıyordum meğer web'de de Async işlem varmış ama biraz tuhaf gibi :D Güzel de yapı artık çoğu işlemleri Async yaparım :) Async candır zaten :D
@pSkpt , Mantıklı farklı 2. bir döngü ile yapılabilir böyle :) Yani method'la yazılan döngüyle buda güzel bi algoritma teşekkürler :) 2. indis'e geçmek için get'in cevap vermesi gerekiyor bu saye de de sıralı işlem oluyor :) Güzelmiş :)
MhmdAlmz tarafından 03/Eyl/16 23:31 tarihinde düzenlenmiştir -
yazılmış zaten asyn false edebilirsin ajaxla
