Çözemediğim Bir Sorun

Merhaba arkadaşlar.

Saatlerdir kafa yorduğum ama ne anlayabildiğim ne de çözebildiğim bir sorunum var. Kodlar GitHub reposunda:

Sorunumun tanımı ise şöyle: server.py, başlatıldığında mecut dizini http://localhost:8000/ adresinden sunuyor ve adresi varsayılan tarayıcıda açıyor. Sayfa, ilk yüklendiğinde <main> etiketi içinde undefined yazıyor, Anasayfa butonuna tıkladığımda ise en başta yüklenmesi gereken anasayfa içeriği yükleniyor. Ben, sorunun static/js/views.js'de olduğunu düşünüyorum.

Bu sorunu nasıl çözebileceğim hakkında bir fikri olan varmı?

İlgilenen herkese şimdiden teşekkür ederim. :slight_smile:

Sayfa ilk yuklendiginde render("anasayfa") cagirman lazim.

scripts.js'ye yazdiginda sayfanin yuklenmesi bitmeden calisiyor; kullandigin seylerden bir tanesi henuz gelmemis oluyor.

window.onload, document.onload, body onload filan bir suru metodu var ama hangisi veya hangileri dogru bilmiyorum, arastirman lazim.

Bu ikisi çalışır ancak üçüncüyü hiç görmedim.

Denedin mi? Bende biri calismiyor cunku.

Ben ihtiyacım olduğunda document.onload kullanıyorum. window.onload fonksiyonunu internette görmüştüm. Ancak denemedim.

Maalesef, onload işe yaramadı (inanın bana, onload'ı kırk farklı şekilde denedim). :confused:

Başka bir öneriniz var mı?

Sorunu, fetch() yerine XMLHttpRequest() kullanarak çözdüm.

Güncel koda GitHub’dan bakabilirsiniz.

(Değişken isimlendirme konusunda önerilere açığım. :slight_smile:)

1 Beğeni

document/window.onload = function() { render(“anasayfa”) }, degil mi? Bende biri calismisti. <body onload="render()"> denemedim. FF 83 veya 84.

XHR’lari sayfa yuklemesi bittikten sonra calistiran bir implementasyon detayina baglanmissin sanki. (Standardi okumadim)

Kullanicinin tetiklemedigi herhangi bir JavaScript kodu yazacaksan onload sorununu cozmen sart.

Evet, sadece normal fonksiyon yerine ok fonksiyonu kullanmıştım.

Hatta şunu bile denedim:

document.querySelector("body").onload = () => render("anasayfa");

onload kullanarak sadece undefined yazısını engelleyebilmiştim.


Verdiğim kodda mı çalıştı?


Anlamadım?


İmplementasyon detayına bağlamak?

fetch(), asenkron çalıştığı için ne olursa olsun render’dan sonra çalışıyordu, bende XMLHttpRequest()'i asenkron özelliği kapalı olarak çalıştırarak çözdüm sorunu.


Kodun güncel halini denediniz mi?


Rica ediyorum, biraz daha anlaşılır konuşun, pek birşey anlamıyorum :sweat_smile:

Ben de oyle yaptim. Dahasi da oldugunu fark etmemisim.

Evet. Bu baslik altina yazdiklarim, aksini belirtmedigim surece, verdiginiz kod ile ilgili.

Ama yanlis soylemisim, calismamis. (Sayfa cogunlukla bos olunca fark etmemisim. Pardon.)

Buna baktigim gun Firefox version 83’ten Firefox versiyon 84’e gectim. Hangisiyle baktigimi hatirlamiyorum.

Firefox bir browser. Bagimsiz (bir sirketin urunu olmayan) browser’larin en yaygin kullanilani.

Bunlari konusan insanlar Ingilizce konustuklari icin Turkcelerini bulmak zor.

Asenkron seylerin sayfa yuklemesi bitiminde calismalarina baglanma, yarin-oburgun degisebilir. (Eger standart aksini belirtmiyorsa. Standartlarin degismeleri daha zor.)

Bir seyi sayfa yuklemesi bitiminde calistirman gerekiyorsa dogrudan sayfa yuklemesi bitiminde calistir, dolayli olarak sayfa yuklemesi bitiminde calistiracak mekanizmaya paslama.

Kodda gordugum kadariyla onload kismini da tutmussunuz, o yuzden dediklerim sizin kodunuz icin gecerli degil.

Sorun değil, sanırım yoğun bir zamanınıza denk geldi. :slightly_smiling_face:


Haa… bende bir hex kodu falan sanmıştım, Firefox’un kısaltmasıymış.


Neyse, benim anladığım kadarıyla: program ya, tamamen asenkron olacak yada, tamamen senkron olacak. Yoksa kodların zamanları birbirlerini tutmuyor. :smile:

İlgilendiğiniz için teşekkür ederim.

Evet. Zamaninda soyle bir makale okumustum. Ogreticiligine dair bir sey soyleyemeyecegim, fakat kirmizi/mavi metaforu aklimda kalmis.

1 Beğeni