Json ile alınan veriyi yönlenecek url e yazdırma?
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>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (6)
Ö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}`
})
})
})
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 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.
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.
@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>