Profil detayı eklendi, herkes profillerine girip bir gözatsın! Sevdiğiniz üyelerin cevaplarını takip edin! Tüm güncellemeler

ajax ile gelen cevapta ondalık sorunu

Ajax ile miktar arttırıyorum, buna göre belirlediğim divlere miktara göre ortaya çıkan fiyatı çekiyorum.


Örneğin birim fiyatı 129.00 TL ise miktarı arttırıyorum ve totalde 3 yaptıysam 129.00 x 3 katı olan sonucu alıyorum burada sorun yok. Ancak, her ne kadar işlemi yaptırdığım ajax post php sayfasında number_format ile fiyatı formatlasam da fiyat ondalıklar silinerek geliyor. Örneğin 875.00 TL geleceğine 875 geliyor. Fiyat 1000 TL yi aşınca hep 1 TL olarak dönüyor.


(Bu arada post ettiğim php dosyasında denemek için post ve get ile işlem denedim. number_format gayet düzgün çalışıyor. Mesele buradan aldığım verinin ajax üzerinden geri gelirken kafasına göre ondalık sorunu yaratması)


Ajax da veri alırken ondalık sorununu nasıl aşarım?


Kullandığım fonksiyon aşağıda


function miktarguncelle(){

var productId = $("input[name=productId]").val();
productId = jQuery.trim(productId);

var miktar = $("input[name=miktar]").val();
miktar = jQuery.trim(miktar);

if(miktar == ""){
alert("miktar girin");
}else {

var miktarproduct = "productId="+productId+"&miktar="+miktar;
$.ajax({
type : "POST",
url : "miktarguncelle.php",
data : miktarproduct,
success : function (sonuc){
if(sonuc == "hata"){
alert("hata");
}else {
$("#sonuc").append(sonuc));
}
}
});

}

}
2

Cevaplar (2)

İşlem devam ediyor, lütfen bekleyin..
Abdulbaki Zırıh
Doğru Cevap
@abdulbaki
5 ay önce
var miktarproduct = {"productId":productId, "miktar":miktar} // verilerini bu şekilde yollamalısın. Ve php tarafını kontrol et gelen değerleri $_POST["miktar"] şeklinde al.
$.ajax({
  type : "POST",
  url : "miktarguncelle.php",
  data : miktarproduct,
  success : function (sonuc){
    if(sonuc == "hata"){
      alert("hata");
    }else {
      $("#sonuc").append(sonuc));
    }
  }
});
Cevapla @barkinas5 ay önce
@abdulbaki, İlgin için çok teşekkür ederim.

İlettiğin şekilde, var miktarproduct = alanındaki betiği düzenledim. Ancak bundan önce ve düzenledikten sonrada ajax post etmemde herhangi bir sorun yok. Post ediyor. Farklı alanlarda da bu betiği kullanıyorum bir sorun yok. Fakat miktarguncelle.php de bulunan 1.454.00 TL olan bir rakamı 1 TL olarak alıyor. Aynı şekilde, 976.00 TL olan rakamda 976 olarak geliyor.

miktarguncelle.php içeriğinde, ilgili alan aşağıdaki gibi

<? if($update){ ?> // burada eğer veritabanında $update betiği çalıştıysa işlem yaptırıyorum.


<script type="text/javascript">

$(document).ready(function(){

$("#sonuc").html(<?=number_format($sepeturunfiyati, 2, '.', ',')?>);
$("#sepettoplamfiyat").html(<?=$sepettoplamfiyat?>);
});

</script>

} //



-------------

(Bu arada, number_format($sepeturunfiyati, 2, '.', ',') çıktısında herhangi bir sorun yok. Sorun bu değer ajax dan geçerken oluyor.)
Cevapla @abdulbaki5 ay önce
@barkinas, Birde şöyle dene istersen fiyat gönderilmeden javascript tarafında fiyatı string'e çevir bunun için .toString(); fonksiyonunu kullanabilirsin. PHP tarafında kontrol et eğer bir bozulma yoksa orada da integer türüne çevir bunun için strval(); fonksiyonunu kullanabilirsin.
Cevapla @abdulbaki5 ay önce
@abdulbaki, javascript string çevirmek örnek var number = 5; number.toString(); PHP integer çevirmek örnek $number = "5"; strval($number);
Cevapla @abdulbaki5 ay önce
@abdulbaki, Yanlış oldu PHP integer çevirmek için strval($number);
Cevapla @abdulbaki5 ay önce
@abdulbaki, Yine yanlış oldu :) intval($number); kafa gitti kusura bakma :)
Cevapla @barkinas5 ay önce
Teşekkür ederim.

şimdi şöyle birşey var. ben tablomda sadece ilgili product kolonunda adet arttırıyorum. dolayısı ile bir fiyat gondermiyorum. sadece productId ve adet gonderiyorum. Benim gonderdigim verilere gore php dosyasında fiyatı hesaplayıp geri alıyorum.
Cevapla @barkinas5 ay önce
@abdulbaki, Teşekkür ederim.

şimdi şöyle birşey var. ben tablomda sadece ilgili product kolonunda adet arttırıyorum. dolayısı ile bir fiyat gondermiyorum. sadece productId ve adet gonderiyorum. Benim gonderdigim verilere gore php dosyasında fiyatı hesaplayıp geri alıyorum.
Cevapla @abdulbaki5 ay önce
@barkinas, Fiyat nerden gidiyor peki? Senin fiyat değerin bozuluyor dimi bunu ajax ile gönderdiğin için olmuyor mu bu sorun? şöyle yapalım https://www.facebook.com/abdulbaki.zirih buradan tw id at istersen birlikte bakalım cevabı buraya yazarız.
Cevapla @barkinas5 ay önce
@abdulbaki, evet oldu! değeri gönderirken, intval() ile integere çevirerek gönderdim. 1 TL olarak gelmiyor artık. Ancak ondalık kısmı hala çözülmedi. Yani 1.119.00 TL olarak yolluyorum 1119 olarak alıyor. Bunun için bir fikrin varmı? Gelen değeri direk div e yazdırdığımdan oynayamıyorum:/

Teşekkürler
Cevapla @selmansamet5 ay önce
Input elemanında girdiğin değeri düzenleyen herhangi bir işlev var mı? Çünkü verinin kafasına göre iş yapması normal değil :)
Asıl problemin kendisini bulup çözmen daha önemli. Farklı yollarla yapmak istediğin elbette yapılır.
Cevapla @barkinas5 ay önce
@selmansamet, ilk postumda kodları incelersen gönderdiğim hidden productId ve miktar input tan başka birşey yok. Bu değerlere göre php dosyasında fiyatı hesaplıyıp div içine alıyorum. Ama number_format a rağmen, ondalıksız geliyor. @abdulbaki sayesinde 1 TL sorununu çözdüm. Yani 999 TL den sonra 1 tl olarak geliyordu. intval ile aştım bu durumu. Ama ondalık sorunu devam ediyor.
Cevapla @abdulbaki5 ay önce
@barkinas, Nasıl bir yapı olduğunu tam anlayamadım az çok bir fikir oluştu ama anladığım kadarıyla senaryolarla cevap vermeye çalışıyım. Şimdi bir php tarafımız var birde javascript tarafımız burada php ile javascript arasında veri alış verişinde bulunuyoruz. PHP'den veya JavaScript'ten veri gönderirken integer'e değil de string'e çevirirsek bu sorunu çözebiliriz gibime geliyor. Bu yöntemi bir dene istersen.
javascript integer çeviri: parseInt(intdegeri);
javascript string çeviri: intdegeri.toString();

php integer çeviri: intval(intdegeri);
php string çeviri: strval(intdegeri);

Unutma veriyi gönderirken string'e çevir. Veriyi alırken integer'a çevir.
Cevapla @abdulbaki5 ay önce
@barkinas, Şimdi jeton düştü biz niye integer'a çeviriyoruz ondalık almak için float'a çevirmemiz lazım :) PHP tarafında float'a çevirmek için floatval(intdegeri);
Cevapla @selmansamet5 ay önce
@barkinas @abdulbaki saat olmuş 12 tabi :D
Cevapla @abdulbaki5 ay önce
@selmansamet, Aynen benim kafa gitti sürekli bir yanlış bir yanlış :)
Cevapla @barkinas5 ay önce
@abdulbaki, integer sorunu çözmüştü. intval. yani 1000 in üstüne çıkıyordu. şimdi floatval için öncelikle makroyu number_format tan geçiriyorum. ama floatval sorunu çözmedi.

ajax a sonuc cevap yollayan betiğim şu şekilde

<script type="text/javascript">

$(document).ready(function(){

$("#sonuc").html(<?=number_format($sepettoplamfiyat,2, '.', ',')?>);
});

</script>

bu alandaki number_format betiğini ortadan kaldırıp, intval veya strval ile gönderince fiyat gidiyor ve 1 TL sorunu ortadan kalkıyor. Ancak floatval ile birlikte number_format işi olmadı :(
Cevapla @abdulbaki5 ay önce
@barkinas, Peki sorun javascript içerisinde php kullanmak olabilir mi yani normalde kullanılabilir ama bu yüzden bir bozulma olabilir mi? Şu şekilde yapsan number_format değerini bir html tagının içerisine yazdırsan sonra javascript ile değeri alsan düzelir mi? Bir dene istersen.
Cevapla @barkinas5 ay önce
@abdulbaki, onuda denedim. Hatta innerHTML de denedim. Hatta html(1.456,00) da yazdım elimde:) yine olmadı. Yabancı kaynaklarda da hep aynı şikayet var demekki ajax ile ondalıklı bir değer alınamıyor. Çözüm bulamadım:( sizde uğraştınız. ama sanıyorum çok uğraştıracak
Cevapla @abdulbaki5 ay önce
@barkinas, Sen tw id at bir bakalım bunu çözmezsek rahat edemem. :)
Cevapla @selmansamet5 ay önce
@barkinas AJAX data değerini JSON.stringify() içinden geçirerek deneyebilir misin bir de? Öbür tarafta parse ederek değeri alabilirsin. Yani tüm problemin kaynağı ondalıklı değerin gitmemesiyse bunu çözelim. Böylece sonraki adımlarda diğer sorunlar olmaz.
Cevapla @abdulbaki5 ay önce
@barkinas, $("#sonuc").html("<?=number_format($sepettoplamfiyat,2, '.', ',')?>"); PHP kodu kullandığın yerlerde tırnak içerisinde denermisin birde.
Cevapla @abdulbaki5 ay önce
<?php

$number = 100.00;
$number = number_format($number, 2);

?>
<script>
var number = <?=$number?>; // bu şekilde çalışmıyor
var number = "<?=$number?>"; // çalışıyor.
console.log(number);
</script>
Cevapla @barkinas5 ay önce
@abdulbaki, Evet, tırnak içine alınca oldu. Çok teşekkürler.

Özetle aynı sorunu yaşayanlar için, değeri gönderirken floatval() ile set edip, tırnak içerisinde append edince ondalık sorunu olmuyor.
Cevapla @abdulbaki5 ay önce
@barkinas, Sevindim sorununun çözüldüğüne bende cevabı güncelliyim. Çözüldü olarak işaretlemişsin oraya son attığım cevabı yazayım bari :)
Cevapla @abdulbaki5 ay önce
@barkinas, Güncellenmiyomuş çözüldü olarak işaretledikten sonra neyse merak eden okusun bu kadar yazıyı :)
İşlem devam ediyor, lütfen bekleyin..
selmansamet
@selmansamet
5 ay önce

Ondalık değeri şu şekilde koruyabilirsin.


number_format(454, 2); // 454.00


Sorun client tarafındaysa fiyat bilgisinin ondalık değerini toFixed ile düzenleyebilirsin.


var num = 454;
num.toFixed("2") //"454.00"
Cevapla @barkinas5 ay önce
teşekkürler. zaten number_format kullanıyorum. Cilent tarafındaki ajax kodu yukarıda göreceksin değeri direkt append ile div içine yazıyor bu yüzden gelen değer ile oynayamıyorum
Cevapla @script5 ay önce
@barkinas o zaman değeri direk append ettirme php tarafında istediğin gibi düzenle ve gönder yada js tarafında bunu yap. birde sorudaki kod kısmını düzenleyip kod olarak belirtirsen düzgünce görelim. sayfayı anlamsız uzatmış.

php tarafında yaptıklarınıda belirtirsen daha güzel olur.
İşlem devam ediyor, lütfen bekleyin..

Cevap yaz Sadece sorunun cevabını yazın

Yabancı Dizi Arşivi