Arkadaşlar mrb. AJAX konusunda bir problemim var. Ancak burada yazmaya çalıştım olmadı. Baya karışık yani forumda yazıp anlatmam günümüz türkçesiyle imkansız . Bana özelden yardım edebilcek kimse var mı acaba?
ajax kullanımı günümüzde çok basittir. jquery kullanırsan günümüz türkçesi ile anlatabileceğin kadar basit kodlarla uğraşırsın. böylece forum amacına ulaşır
arkadaşlar problem şurada. AJAX kullanarak index.php sayfasının içerisinde <div id="icerik"></div> bu alanı çağırtıyorum bilgileri. Ama farklı sayfaları çağırtmıyorum. Tüm sayfalar ve kodlar index.php içerisine gömülü. Ayrıca php + MySQL ile de index.php içerisinde icerik alanına cagırtırken index.php?syf=1&katID=1 şeklinde veya index.php?syf=1&katID=5 şeklinde sayfalar çağırtıyorum. Anlıyacağınız herşeyi tek sayfada yapıyorum. Problem şurda bir tane lightbox ekledim index.php içerisine. Resimlere tıklayınca normal şekilde açıyor resmi. Yani javascript kodları etkin olmuyor index.php de. Problem biraz karışık o yüzden yazmayayım dedim. Başka bi amacım yok anlıcanız .Özelden yardım edebilcek kimse varmı?
özelden kastım msn falandı yani gördüğün gibi problem biraz karışık foruma yazacaktım da işte nasıl yazayım diye düşündüm. Bu arada zaten tüm js ajax ve css kodları index.php de. yani anlıcan tüm kodlar index.php de herşey index.php den yapılıyor. tek sayfa. ama problem şu ki <head></head> tagları arasında js ve css kodları yazmasına rağmen ajax ile cektigim sayfada js ve css kodları işlemiyor. Yani bir lightbox uygulaması yapamıyorum. Resme tıkladığında büyüyecek cinsten. Bende tek sayfa ve dediklerin zaten yaptım. tüm herşey head tagları arasında yazıyor. Tüm js ve css kodları. Senin dediğin mantıkta yapmayı deneyeceğim şimdi. Yani iki sayfa oluşturacagım bir tane html bir tane php. Bilgi için teşekkür ederim. Deniyorum...
Dostum zaten dediğin gibi yapmıştım ben. Ama senin dediğin gibi yaptım iki sayfa olarak yine olmadı. Ayrıca şunuda belirteyim. Örnegin iki tane sayfa var ürünler ve hakkımızda şeklinde. Önce ürünler sayfasının kaynak koduna bakıyorum, ajax ile hakkımızda sayfasını çağırdıgım zaman tekrar sayfanın kaynak koduna bakıyorum halen ürünler sayfasının kaynak kodlarını görüyorum. Bununla alakalı bir sıkıntı olabilir mi? Ama lightbox un tüm css ve js kodları ana sayfada head tagları arasında.
ligthbox'ın çalışmamasına sebep olarak lightbox kodlarının sayfadan sonra çağrılması sebep gösterilebilinir. bazı scriptler sizin html ile işaretlediğiniz(css rel gibi kodlarla) bilgileri bulup değiştirirler ve sistem bu değişiklikler sayesinde işler. bu durumda eğer sayfa script'den sonra yüklenirse (ajax ile) script'in istediği kısımlara müdahale etme şansı olmaz. dolayısıyla script'i tekrar yüklemeniz gerekir.
jquery açısından bu işlem böyle bir koda tekabul eder.(lightbox'lı için)
olay benim anlattığım gibi. lightbox script'i yüklendiğinde mevcut sayfada kendini ilgilendiren kısımları değiştirir. bu sayede çalışması mümkün olur. ajax gibi sonradan bir müdehale olursa müdehale sonucu oluşan kodlar lightbox'ın sayfa yüklemesindeki değiştirme işleminden mahrum kalır ve sıradan bir şekilde çalışır.
çözüm ajax ile sayfa yüklendikten hemen sonra lightbox'ı tekrar çalıştırmaktır.
Sn. orcnd uygulama için teşekkür ederim. jquery kullanmadan kendim yapim dedim ajax ama galiba yine dediğin gibi jquery kullanıcam. Örnek için tekrar teşekkür ederim.
olay benim anlattığım gibi. lightbox script'i yüklendiğinde mevcut sayfada kendini ilgilendiren kısımları değiştirir. bu sayede çalışması mümkün olur. ajax gibi sonradan bir müdehale olursa müdehale sonucu oluşan kodlar lightbox'ın sayfa yüklemesindeki değiştirme işleminden mahrum kalır ve sıradan bir şekilde çalışır.
çözüm ajax ile sayfa yüklendikten hemen sonra lightbox'ı tekrar çalıştırmaktır.
Arkadaşlar "sonlandırılmamış dize sabiti hatasını alıyorum" index.php de neden olabilir bu hata? sayfaları falan cagırıyor ve sayfaları acıyor resimleride açıyor ama ie falan cok kasıyor sol alt köşede de dediğim gibi hata var.
orcnd teşekkürler çalıştı ancak sayfa biraz kasıyor açılırken 9 tane resim var ayrıca sayfamda index.php?yer=1&syf=1 gibi değişkenlerle çagırıyorm veri tabanından verileri bunlar sayfalanıyor 1 2 3 diye sayfalanıyor. Bu sayfalar calısmıyor bunları nasıl calıstırcam?
eklersen ajax ile çağırdın sayfalardaki linklere hükmetmiş olursun. buradaki önemli nokta ise bazı linkler mevcut sayfa içinde açılmaz
a tagının target özelliği bu konuda belirleyicidir. eğer target özelliği _self ise mevcut çerçeve içinde açılacak anlamını taşır. eğer _parent ise mevcut pencere içinde (çerçeveleri tanımaz kaldırır) açılacak anlamına gelir. blank ise yeni sayfa anlamındadır.
yazdığım kod target özelliği _blank veya _parent olan linkleri etkilemiyor. ayrıca rel özelliği lightbox olanları da etkilemesin diye bir ekleme yaptım.
<a data-test="test" rel="nofollow" style="word-wrap: break-word; text-decoration: underline;" target="_blank" onclick="return dhExternalLinkRedirect(this)" href="/ExternalLinkRedirect?module=pgdcode&messageId=37661611&url=deneme.html" data-href="deneme.html">deneme sayfası</a> bu tarz bir kullanımda işlemi jquery ajax kullanarak yapacaktır.
Peki <form action="" method="post">.....<input type="submit" value="tamam"></form> bu şekilde bir tagı ajax kulllandığım bir sistemde kullanmam için action kısmına ne yazmam gerekli?
jquery'nin serialize fonksiyonu ile verileri alıp ajax ile göndereblirsiniz.
örnek:
function formbind() { $("form.ajaxform").submit(function() { var hedef=$(this).attr("target"); $.ajax({ type:$(this).attr("method"), url:$(this).attr("action"), data:$(this).serialize(), success: function(ajaxCevap) { if (hedef=="alertbox") { alert(ajaxCevap); }else{ if (hedef) { $(hedef).html(ajaxCevap); } } } }); return false; }); }
kullanımı özelleştirilebilinir elbette fakat ben birkaç ufak ekleme yaptım. öncelikle kullanırken hem sayfa yüklenişine formbind() şeklinde eklemek gerekli hemde ajax ile sayfa çağırdığımız sayfa yükle fonksiyonunun $(sonucid).html(ajaxCevap); ile ajax cevaplarını yazdırdığımız kısmın hemen altına eklemek gerekli
böylece ajax ile yüklenen sayfalar ajax form özelliğinden faydalanabilir olacaklardır.
action kısmı yine verilerin gönderileceği sayfa. method yine kendi işlevinde.
target kısmı ise sonucun nerede gösterileceğini belirliyor. bu amaçla target özelliği alertbox yapıldığında mesaj kutusu ekranda beliriyor. bunun dışında girilen veriler doğrudan id veya class özelliği kabul edilip o kısımlara atılıyor.
.icerik yazarsanız class'ı icerik olan yere atar. aynı şekilde #icerik yazarsanız id'si icerik olan yere atar.
eğer target özelliği belirtmezseniz sonuc ekranda gözükmüyor.
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesaja 1 cevap geldi. Cevapları Gizle
< Bu mesaj bu kişi tarafından değiştirildi Külyutmaz -- 7 Şubat 2010; 4:27:51 >
Bu mesaja 1 cevap geldi. Cevapları Gizle
böylece çakışmadan kurtulursun.
örnek olarak
ajax örneği
lightbox ve benzerleri
ligthbox'ın çalışmamasına sebep olarak lightbox kodlarının sayfadan sonra çağrılması sebep gösterilebilinir.
bazı scriptler sizin html ile işaretlediğiniz(css rel gibi kodlarla) bilgileri bulup değiştirirler ve sistem bu değişiklikler sayesinde işler.
bu durumda eğer sayfa script'den sonra yüklenirse (ajax ile) script'in istediği kısımlara müdahale etme şansı olmaz.
dolayısıyla script'i tekrar yüklemeniz gerekir.
jquery açısından bu işlem böyle bir koda tekabul eder.(lightbox'lı için)
kullanımı sayfa_yukle("index.php","id=1&ad=orcun&is=bosgezmek") şeklinde olacaktır
edit: düzeltme
< Bu mesaj bu kişi tarafından değiştirildi orcnd -- 7 Şubat 2010; 17:18:05 >
alt kısımdaki linkden indirebilirsin.
olay benim anlattığım gibi. lightbox script'i yüklendiğinde mevcut sayfada kendini ilgilendiren kısımları değiştirir. bu sayede çalışması mümkün olur.
ajax gibi sonradan bir müdehale olursa müdehale sonucu oluşan kodlar lightbox'ın sayfa yüklemesindeki değiştirme işleminden mahrum kalır ve sıradan bir şekilde çalışır.
çözüm ajax ile sayfa yüklendikten hemen sonra lightbox'ı tekrar çalıştırmaktır.
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesaja 1 cevap geldi. Cevapları Gizle
chrome 4.0.249.78
internet explorer 8
firefox 3.6
ve opera 10.10'da sorunsuz çalıştı
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesaja 1 cevap geldi. Cevapları Gizle
kodunun hemen altına
$('#icerik a').click(function() {
if ($(this).attr('target')!="_blank" && $(this).attr('target')!="_parent" && $(this).attr('rel')!="lightbox") {
sayfa_yukle($(this).attr('href'),"","#icerik");
return false;
}
});
eklersen ajax ile çağırdın sayfalardaki linklere hükmetmiş olursun. buradaki önemli nokta ise bazı linkler mevcut sayfa içinde açılmaz
a tagının target özelliği bu konuda belirleyicidir. eğer target özelliği _self ise mevcut çerçeve içinde açılacak anlamını taşır.
eğer _parent ise mevcut pencere içinde (çerçeveleri tanımaz kaldırır) açılacak anlamına gelir. blank ise yeni sayfa anlamındadır.
yazdığım kod target özelliği _blank veya _parent olan linkleri etkilemiyor. ayrıca rel özelliği lightbox olanları da etkilemesin diye bir ekleme yaptım.
<a data-test="test" rel="nofollow" style="word-wrap: break-word; text-decoration: underline;" target="_blank" onclick="return dhExternalLinkRedirect(this)" href="/ExternalLinkRedirect?module=pgdcode&messageId=37661611&url=deneme.html" data-href="deneme.html">deneme sayfası</a> bu tarz bir kullanımda işlemi jquery ajax kullanarak yapacaktır.
edit:düzeltme
< Bu mesaj bu kişi tarafından değiştirildi orcnd -- 7 Şubat 2010; 23:48:38 >
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesaja 1 cevap geldi. Cevapları Gizle
örnek:
kullanımı özelleştirilebilinir elbette fakat ben birkaç ufak ekleme yaptım.
öncelikle kullanırken hem sayfa yüklenişine formbind() şeklinde eklemek gerekli
hemde ajax ile sayfa çağırdığımız sayfa yükle fonksiyonunun
$(sonucid).html(ajaxCevap); ile ajax cevaplarını yazdırdığımız kısmın hemen altına eklemek gerekli
böylece ajax ile yüklenen sayfalar ajax form özelliğinden faydalanabilir olacaklardır.
form kullanımına gelince
<form action="post.php" method="post" target=".icerik">
..........
......
</form>
action kısmı yine verilerin gönderileceği sayfa. method yine kendi işlevinde.
target kısmı ise sonucun nerede gösterileceğini belirliyor. bu amaçla target özelliği alertbox yapıldığında
mesaj kutusu ekranda beliriyor. bunun dışında girilen veriler doğrudan id veya class özelliği kabul edilip o kısımlara atılıyor.
.icerik yazarsanız class'ı icerik olan yere atar. aynı şekilde #icerik yazarsanız id'si icerik olan yere atar.
eğer target özelliği belirtmezseniz sonuc ekranda gözükmüyor.