v2.5.2
Giriş yap

Json ile alınan veriyi yönlenecek url e yazdırma?

mertaslan
477 defa görüntülendi

Merhaba arkadaşlar yeni yeni öğrenmeye çalışıyorum bu sorunumu da günlerdir aramama rağmen bir türlü çözüme kavuşturamadım. Sizlere sormaya karar verdim. Muhtemelen çok basit bir çözümü vardır ama bir türlü yapamadım.

Json ile aldığım değeri yönlenecek url e yazdırmak istiyorum. Kod içerisinde de belirttim. Şimdiden çok teşekkür ediyorum.

<script type="text/javascript">  

	$(function() {

		$("a.soru_okundu").click(function() {

			var nesne = $(this);

			var id = nesne.attr("id");

			var sorusef = nesne.attr("sorusef");

			var cevapid = nesne.attr("cevapid");

			$.ajax({

				url: "<?php echo $arow->site_url; ?>/sistem/bildirim-okundu.php",
				data: {id:id,sorusef:sorusef,cevapid:cevapid},
				type: "post",
				dataType: "json",
				success: function(data) {
					location.href = "<?php echo $arow->site_url; ?>/soru/BURAYA SORU SEF İLE ALDIĞIM DEĞERİ YAZDIRMAK İSTİYORUM"
				},
				error: function(data) {
					location.href = "<?php echo $arow->site_url; ?>/soru/BURAYA SORU SEF İLE ALDIĞIM DEĞERİ YAZDIRMAK İSTİYORUM"
				}


			});

		});

	})

</script>
Cevap yaz
Cevaplar (6)
abdullahx
1088 gün önce

Öncelikle size de bazı mesajlarımda belirttiğim bazı durumları açıklayayım. Daha temiz ve doğru bir kod yazabilme açısından ufak detaylar.

(Muhtemelen JQuery nin güncel sürümlerinden birini kullandığınızı varsayıyorum)
$(selector).click(function() {}) yerine $(selector).on("click", function() {}) kullanın

Gördüğüm kadarıyla a elemanına sorusef ve cevapid adında özellikler (attribute) eklemişsiniz. Bu HTML5 kurallarına biraz aykırı bir durum, eğer veri taşımak için kendiniz bir şey eklemek istiyorsanız bunu data- ön eki ile kullanmanız gerekir. Diğer türlü de çalışır ama yanlış bir kullanım olur. data-sorusef ve data-cevapid şeklinde düzenlemenizi öneririm. Jquery tarafında bu değerleri alırken de attr data metodunu kullanabilirsiniz.

Sorunuza gelecek olursak success ve error fonksiyon olması fark etmeksizin her türlü aynı linke yönlendirme yapmak istiyorsunuz. Bunun için kodu kısaltmak için then sonrasına tek bir kod yazılması yeterli olur. Yukarıda söylediğim değişikliği yapmanız sonucu kodun son hâli şöyle gözükecektir.

$(function() {
        $("a.soru_okundu").on("click", function() {

            let nesne = $(this),
             id = nesne.attr("id"),
             sorusef = nesne.data("sorusef"),
             cevapid = nesne.data("cevapid");

            $.ajax({
                url: "<?= $arow->site_url ?>/sistem/bildirim-okundu.php",
                data: {
                    id: id,
                    sorusef: sorusef,
                    cevapid: cevapid
                },
                type: "post",
                dataType: "json"
            }).then(() => {
                location.href = `<?php echo $arow->site_url; ?>/soru/${sorusef}`
            })
        })
    })
abdullahx
1087 gün önce

Konu hakkında dün yanlış bildiğim ve haliyle buraya da yanlış yazdığım bir şeyi düzeltmek istiyorum, belki sonradan bu yazıyı birileri okur, bu yüzden yanlış bilgiyi düzeltmek gerekiyor. Mesajımda Bunun için kodu kısaltmak için then sonrasına tek bir kod yazılması yeterli olur yazmışım, fakat bu bilgi doğru değil. Konu sahibi arkadaşın bu cevabında belirttiği durumdan sonra bu konuyu daha doğru hâliyle öğrenmek istedim. 400 yanıt kodu ile gelen yanıtlarda çalışmadığını, 200 yanıt kodu ile gelen cevaplarda çalıştığını söyledi. Çünkü then metodu, done ve fail metodlarının (başarılı ve başarısız) birleştirilmiş bir şekli gibi düşünülebilir. İlk fonksiyon olarak done, ikinci fonksiyon olarak fail alıyor. Ben then içerisinde tek bir fonksiyon kuıllandığım için bu da hâliyle done yani success fonksiyonuna denk geliyor. Onun için de 400 hata kodlu yanıtı yakalayamıyor ve yönlendirme işlemi gerçekleşmiyordu.

Sunucundan gelen yanıtın ne olduğuna bakmaksızın çalışan metod olarak always metodu kullanılıyor. Bu bilgiler ışığında then yerine always yazılırsa daha doğru bir yanıt verilmiş olur.

abdullahx
1088 gün önce

Rica ederim, kolay gelsin :)

mertaslan
1088 gün önce

@abdullahx hocam çok sağolun aslında sorunum backtick ile ilgili değilmiş bende backtick doğru şekildeydi buraya kopyalayınca öyle olmuş ben sonuçları http_response_code(200); ve http_response_code(400); ile geri çeviriyordum. 400 ile geri dönen sonuçta yönlendirme çalışmıyordu 200 ile dönenlerde çalışıyormuş. Zaten her halükarda aynı url e yönleneceği için tamamını 200 yaptım. Allah sizden razı olsun beni çok büyük dertten kurtardınız hocam çok sağolun.

abdullahx
1088 gün önce

location.href = '<?php echo $arow->site_url; ?>/soru/${sorusef}'

bu kısım benim attığım kod ile aynı değil, dikkat ederseniz ben backtick yani ` karakteri kullandım, siz normal kesme işareti yapmışsınız, bunlar farklı şeyler. backtick işareti sayesinde string içerisinde + işaretlerini kullanmadan javascript kodu/değişkeni vs yazabiliyoruz.

mertaslan
1088 gün önce

@abdullahx hocam maalesef çalıştıramadım ben bu düzeltilecek kısmı anlayamadım galiba.
kodlarım şu şekilde:


<a class="soru_okundu text-secondary underline" data-sorusef="<?php echo $bildiri['soru_sef'];?>" data-cevapid="<?php echo $bildiri['cevap_id'];?>"  id="<?php echo $bildiri['bildirim_id'];?>" href="nojavascript...;"><?php echo $bildiri['soru_baslik']; ?></a> sorunuza cevap yazıldı <br> <span class="text-light"><?php echo timeConvert($bildiri['bildirim_zaman']); ?></span>

<script type="text/javascript">  

$(function() {
        $("a.soru_okundu").on("click", function() {

            let nesne = $(this),
             id = nesne.attr("id"),
             sorusef = nesne.data("sorusef"),
             cevapid = nesne.data("cevapid");

            $.ajax({
                url: "<?= $arow->site_url ?>/sistem/bildirim-okundu.php",
                data: {
                    id: id,
                    sorusef: sorusef,
                    cevapid: cevapid
                },
                type: "post",
                dataType: "json"
            }).then(() => {
                location.href = '<?php echo $arow->site_url; ?>/soru/${sorusef}'
            })
        })
    })

</script>