Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Ajax - Firefox Get, Post Problemi


jonq

Öne çıkan mesajlar

Iki gundur google u altust edip bir sürü kod inceleyip denememe rağmen sorunumun bir çözümüne ulaşamadım.Takip ettiğim yegane forumlardan biri olduğu için PHP forumları yerine önce buraya bir sorayım dedim.

Öncelikle sorunum şöyle. Bir listeleme motoru yapmam icap etti soyleki ,

kategori > ulke > sehir

Bu bilgilerin hepsi veritabanın da tutulmakta ( mysql ) ve sitenin içeriği ile ilgili olan ulke/sehirler eklenip çıkarılabilmekteler. Kategori seçince o kategoriye ait ulke, ulke seçince o ulkeye ait sehirleri comboboxlara ajax yardımıyla getirmekteyim. Daha sonra FORM u GET method ile Submit ettiğimde ajax ile getirip oluşturduğum comboxların değerlerini çekemiyorum. Adres barda da hiç bir şekilde gorunmuyorlar. Ancak kullandıgım script IE de sorunsuz çalısıyor.

Ilgili javascript kodu


var xmlHttp
// str -> cagrilan combobox
// str2 -> gonderilen value degeri
function boxgetir(str,str2,str3){
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null){
alert ("Browser does not support HTTP Request")
return
}
//alert (str);
//alert (str2);
//alert(str3);

var url="arama2.php"
url=url+"?box="+str
url=url+"°er="+str2
url=url+"&kate="+str3
url=url+"&sid="+Math.random()

if (str==10){
xmlHttp.onreadystatechange=stateChangeu
}
if (str==20){
xmlHttp.onreadystatechange=stateChanges
}
if (str==30){
xmlHttp.onreadystatechange=stateChangeo
}
if (str==40){
xmlHttp.onreadystatechange=stateChangep
}
xmlHttp.open("GET",url,true)
xmlHttp.setRequestHeader(`Content-type`, `application/x-www-form-urlencoded;charset=iso-8859-9`);
xmlHttp.setRequestHeader(`Content-type`, `application/x-www-form-urlencoded;language=tr`);
xmlHttp.send(null)
}
function stateChangeu(){
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
document.getElementById("utxtHint").innerHTML=xmlHttp.responseText
}
}

function stateChanges(){
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
document.getElementById("stxtHint").innerHTML=xmlHttp.responseText
}
}

function stateChangeo(){
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
document.getElementById("otxtHint").innerHTML=xmlHttp.responseText
}
}

function stateChangep(){
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
document.getElementById("ptxtHint").innerHTML=xmlHttp.responseText
}
}

function GetXmlHttpObject(){
var xmlHttp=null;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e){
//Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}




Arama ile Ilgili Html Kodu


<table width="561" border="0" align="center" cellpadding="2" cellspacing="1" class="tables">
<form name="arama" id="arama" action="?sayfa=fiyat_listesi" method="get">
<tr>
<td colspan="4" bgcolor="<?=$aramabar;?>" class="beyazbold"><input name="sayfa" type="hidden" value="fiyat_listesi" />Dil Okulu Arama Motoru </td>
</tr>
<tr>
<td width="1%" align="left" bgcolor="#ffffff">
<select id="prog" name="prog" class="dpTable2" onchange="boxgetir(10,this.value,this.value); document.getElementById('utxtHint').innerHTML='Yukleniyor!...'; document.getElementById('lsubmit').disabled=false;">
<option value="">Lutfen Program Seçiniz</option>
<option value="1">Dil Okulları</option>
</select></td>
<td width="1%" align="left" bgcolor="#ffffff">
<div name="utxtHint" id="utxtHint">
<select id="ulke" name="ulkeler" class="dpTable2">
<option value="">Lutfen Ulke Seçiniz</option>
<option value="">Once Program Seçiniz</option>
</select>
</div></td>
<td width="1%" align="left" bgcolor="#ffffff">
<div name="stxtHint" id="stxtHint">
<select name="sehirler" class="dpTable2">
<option value="">Lutfen Sehir Seçiniz</option>
<option value="">Once Ulke Seçiniz</option>
</select>
</div></td>
<td align="left" bgcolor="#ffffff">
<div name="otxtHint" id="otxtHint">
<select name="okullar" class="dpTable2">
<option value="">Lutfen Okul Seçiniz</option>
<option value="">Once Sehir Seçiniz</option>
</select>
</div></td>
</tr>
<tr>
<td colspan="4" align="center" bgcolor="#ffffff"><input name="Listele" id="lsubmit" type="submit" class="mailbox" value="Uygula" onclick="if (document.getElementById('users').value.length==0 || document.getElementById('pusers').value.length==0){ alert('Okulları görmek için önce Ülke ve Program seçmeniz gerekiyor?'); return false; } else { return true; }" disabled/></td>
</tr>
</form>
</table>



Dediğim gibi sadece Firefox da ne GET ne de POST methoduyla çalışmıyor.
lerin içine gelen comboboxların value değerlerini alamıyorum.
Link to comment
Sosyal ağlarda paylaş

bosver bu kismi

firefox'ta table'larin altinda yer alir. Soyle ki





dedigin zaman, sen getElementsByID('formTable') dediginde sana table'i verir. Daha sonra .child'ini aldiginda ilk child normalde olmasi gerekirken firefox 'i yollar. ama IE'de kodda yoksa, ne varsa onu alir.
Bu nedenle html kodunda, her table'i







seklinde yaz. Daha sonra da js'de alinan child'lara bi layer daha ekle.




div'lerin value'su degil ki onlar. div'lerin child'i olan select'in value'su. yani getElementByID("xx") sana sadece yapiyi donduruyo. Bunun child'ini alman gerekiyo
Link to comment
Sosyal ağlarda paylaş

riglous'un dediği gibi;
sen ilgili div'in innerHTML'ini değişitiriyorsun ki halihazırdaki select elementlerini tamamen silip, yerine raw text koyuyorsun. dolayısıyla ff submit edemiyor. doğru davranıyor...

div yerine select elementine verirsen o id'leri..

Sosyal ağlarda paylaş

Simdi Divleri seklinde yaptım yine IE de calısıyor ama FF de calısmadı.Soyle ki biraz daha net olayım.

Simdi soyle diyelim orada raw text degilde boş olsun şu sekilde Ajax ile Kategori combobox undan secilen value u arkada işlem yapması gereken PHP dosyasına iletiyorum. Orda da veritabanı ile ilgili işlemler yaptıktan sonra id="bla" ya gerekli döngüyü kurarak bir seklinde bir görünüm oluyor ama bu form u SUBMIT ettigimde sadece leri alamıyorum.

Bahsettiğiniz Child olayını kurcalıyorum ekleyince IE dede çalışmıyor ama child olayını ayarlayabilirsem her browserda çalısacagını tahmin ediyorum.
Link to comment
Sosyal ağlarda paylaş

ben açık yazamamışım =) baştan başlıyorum:

öncelikle html formu içinde submit metodunu kullandığında, browser bir data set oluşturur ve daha sonra bunu gönderir. bu data set hangi değerleri barındırır? form elementi içinde kalan input, select, option, textarea falan fişmekan.. yani div, span gibi inline ya da block elementlerinin form elementi için bir veri değeri yoktur. w3c standartlarına göre konuşuyorum. dediğine göre ie böyle davranmıyormuş ama bu firefox'un sorunu değil aslında. yani bu durumda bizim submit yöntemimizi değiştirmemiz gerekiyor =)

şimdi select elementini span ya da div elementinin içine alıp, child'ını almaya falan da gerek yok. bir üstte yazdığım mesaj, zaten doğrudan select elementinin o an seçilmiş değerine ulaşmanı sağlar.

ayrıca div içinden child değere erişme imkanımız olsa dahi yaptığın şey yanlış.. zira benimDivElementim.innerHTML = "bla bla"; dediğin anda benimDivElementim içindeki tüm içeriği (senin örneğinde select elementi oluyor bu) siliyor ve onun yerine "bla bla"yı koyuyorsun. ortada artık değeri alınacak bir select elementi kalmıyor.

neyse, senin kodundan devam edelim;

js + html

o kadar if sorgusuna gerek yok öncelikle:

xmlHttp.onreadystatechange=stateChange(str);

daha sonra ilgili fonksiyonu da şöyle yapıyoruz:

function stateChange(selectID){
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
var mySelect = document.getElementById(selectID);
mySelect.options[mySelect.selectedIndex].text = xmlHttp.responseText;
}
}


daha sonra html'de select elementlerini nasıl giriyoruz? şöyle:





id'si 10 olan select elementi, ülkeye denk geliyor.. javascript içinde de str == 10 diye kontrol ediyorduk ya hani..



yazarken iş girdi araya, anlam bütünlüğünü koruyamamış olabilirim ama içerik doğru =) kolay gelsin.

not: kodu test etmedim ve başka bir hata üzerine yoğunlaşmadım.
Link to comment
Sosyal ağlarda paylaş

Ilk paragrafta soyledigin beni benden aldı :). En azından browserın neden boyle davrandıgını farketmiş oldum ve ona göre çözüm yolu aradım. Biraz sağ kulağını sol elinle tutmak gibi oldu ama sonuçta işime yarar bir yol buldum. Şimdilik bir sorun gorunmuyor bakalım kurcalıyım biraz daha, en azından kodları optimize etmem gerekiyor bu durumda sanırım.

Ajax'a daha yeni yeni girdim sayılır bakalım daha nelerle karşılaşıcağız.Çok saolun yardımlarınız için.
Link to comment
Sosyal ağlarda paylaş

Baska bi seyle karsilasmayacaksin, bunlarla cebelleseceksin genelde. Ayni mantigi farkli yerlere uygulayacaksin.

Bence AJAX, js'yi yeniden canlandirma girisimlerinden biri. Simdilik tuttu ama ileriki yillarda unutulmaya mahkum bi dil. Emin ol daha iyisi gelecek ki bu nedenle fazla sarmamani tavsiye ederim.
Link to comment
Sosyal ağlarda paylaş

AJAX şu anda yeni nesil web tabanlı programların kilit noktası. Daha bir kaç gün katıldığım seminerde trends in web applications diye bir sunum vardı. Yeni geliştirilen dillerin ve konseptlerin bir çoğu AJAX üstüne kuruluyormuş. Uzun bir süre AJAX'ın bir yere kaybolacağını zannetmiyorum. Daha yeni yeni oturmaya başladı zaten.
Link to comment
Sosyal ağlarda paylaş

Herkesin ongorusu farklidir. Bu benimkisi. AJAX sistemi tabii ki devam edecek, dogrudan feedback verebilmesi sayesinde bircok zahmetten kurtardi ancak bu JS ile olmayacak, yeni bir dil gelistirilecek. Eh bu noktada da isminin AJAX olarak kalmasi mantiksiz.

Ha cikacak yeni dil JS2.0 olur baska bi sey olur, orasi pek onemli degil acikcasi. Onemli olan kismi js'nin hantalligi ve ogrenmeye deger bir dil olmamasi
Link to comment
Sosyal ağlarda paylaş

Uzun zamandır yapmak isteyipte yapamadığım şeylere imkan sağlaması benim için büyük yenilik. ( sayfayı yenilemeden içinde oynamalar yapmak ).Ajax uzun zamandır var olmasına rağmen bu zamana kadar pek kullanan olmamış nedense Gmail den sonra baya bir rağbet görmeye başladı.
Link to comment
Sosyal ağlarda paylaş

- öncelikle framework de olsa, onun da sözdizimi oluyor. js'e hakim olsanız bile framework'ün sözdizimine aşina olmanız gerekiyor ki ben bunu tercih etmem. js öğrenmeden sadece framework'e hakim olmak ise sizi kısıtlar. gösterilenle yetinirsiniz. framework, spesifik sorunlarınıza deva olmuyor genellikle.. bu js'i ne kadar ve nasıl kullandığınızla da ilgili yani.. ben framework'lere pek sıcak bakmıyorum. tercih etmek zorunda kalsam da framework yerine js kütüphanesi kullanırdım.

- öte yandan bazı durumlarda tek bir fonksiyon için koca kütüphaneyi kullanıcıya indirtmek, boşuna sayfaların indirilmesini yavaşlatmak hoş değil. dezavantaj.

framework ya da kütüphane iyidir. işinizi kolaylaştırır ve zaman kazandırır. ama her durumda iyidir demek yanlış olur.

edik:
mirage, piyasadaki en iyi ve popüler framework'leri sıralıyım:
YUI (yahoo user interface), prototype, script.aculo.us, dojo toolkit.. bunların sitelerine bakarsan, bir fikrin olur zaten ;)
Link to comment
Sosyal ağlarda paylaş

Evet. jQuery'nin 10 küsür kb'lık js dosyası kullanıcı açısından büyük bir külfet olsa gerek :)

Yapmayın allah aşkına. Çoğu sistemde kütüphaneler 100 kb'ı geçmiyor bile.

Peki Javascript öğrenilmeden js framework kullanılır mı? Bal gibi kullanılır. Js hakkında bilginiz vardır, mantığını bilirsiniz. Css hakkında bilginiz vardır, mantığını bilirsiniz. Sonra açarsınız adam akıllı bir js framework'ün manual'ını, bir kaç saat/gün içinde Neo misali 'I know Kung-Fu' diye kalkarsınız yerinizden. Yapmak istediğiniz işler için fazlasıyla yeterlidir.

Ha amaç sadece dört dörtlük şekilde, iş için değil zevk için javascript öğrenmek ise pek tabi buyrun, tutmayayım ben sizi :)

Yok iş yapacaksanız, saç baş yolmadan halledeyim derseniz alın bir kütüphane/framework (js için iki kavramda aynı kapıya çıkıyor neredeyse) kullanın.

Hatırlatmak isterim ki hala IE 6 diye bir bela var dünyada. Sırf bu yüzden bile cross-browser js/css yazmak gerçekten zor iş. Uğraştırıcı, sıkıcı ve tam anlamıyla vakit kaybı.
Link to comment
Sosyal ağlarda paylaş

- 100 kb, yoğun trafiği olan ve listeleme gibi büyük veriler transfer eden sayfalarda büyük bir rakamdır.

- ben de öyle dedim işte.. js bilmeden framework kullanılabilir. ama framework kullanarak, js ile yapabileceğiniz her şeyi yapamazsınız. yapsanız da "hakkıyla" yapamazsınız. (case study: spreadsheet modelinde schedule. bu örnekten o kadar fazla hadise çıkarabilirim ki..)

- js library ile js framework aynı şey değildir. framework'ün kendine has spesifikasyonları vardır, library'nin yoktur.

- amatörsek ya da hobi için js öğrenelim? profesyonel isek framework kullanalım.. ben bunu anladım nedense yazından(?) peki.

- slideshow gibi şeyler için sıfırdan js kodlamaya gerek yoktur ama js de sadece bu değildir. framework, browser-based uygulamaların çoğuna hitap etmiyor.

Ractamainus said:

framework ya da kütüphane iyidir. işinizi kolaylaştırır ve zaman kazandırır. ama her durumda iyidir demek yanlış olur.


son söz olarak şunu söyleyebilirim; günümüzde .net gibi platformlar var ama c de hala belirli sektörlerde vazgeçilmezdir. gibi..
Link to comment
Sosyal ağlarda paylaş

ben de framework yerine kutuphane kullanilmasi taraftariyim

he kendi projelerimde tembelligimden framework kullanirim, orasi ayri. bkz birseyin dogrusunu bilmek ile uygulamanin farklari

ayrica, piyasada framework diye dolanan cogu javascript kodu aslinda gelismis birer kutuphane. gerci framework ve kutuphane arasindaki fark keskin olmadigi icin bu tartisma uzamaya musaittir =)
Link to comment
Sosyal ağlarda paylaş

Fark kesin abi ikisi arasinda. Birisi kutuphane, digeri taslak. Kutuphane tek bi amaca yonelik kitaplar icerir, girer alirsin, isine yaradigi surece kullanir, isin bittiginde de geri verirsin. Taslakta ise zaten belli kutuphanelere girmis cikmis bi ust seviyedesin gibi dusun. Ha bu hala kutuphane kullanamyacagin anlamina gelmiyo ama misal opengl library'sini kullanirken yapacagin is daima goruntuyledir. Ama bi ruby on rails'la blog da yaparsin ecomm. sitesi de yaparsin... Javascript library'lerine hic bakmadim ancak mantik olarak dusundugunde zaten javascript icin "library"lerin hepsinin framework olmasi gerekli. Cunku compile etmek gibi bi durum olmadigindan dogrudan islemi yapan browser'a kalmis bir durum. Keske library gibi bi durum olsaydi da hepsi icin tek bi kod calissaydi, butun browser'lar da library'i kullansaydi...
Link to comment
Sosyal ağlarda paylaş

nasıl derlemek yok abicim, senin kodunla birlikte o da derleniyor. ki zaten derlemek ilke kütüphane-framework farkını anlayamadım..

framework'ün bence en önemli özelliği (ki bu da tanımına göre değişiyor ve ortada zilyon farklı tanım dönüyor) birden fazla seviyeyi, katmanı ya da eşseviye işlemi, yazılımı bir araya getirmesi. yani bir ajax framework vardır, server tarafında kodları hazırlar, xml çıktısını oluşturur, javascript kodu vardır kullanıcı tarafında derlenir, bu paşalar gibi bir frameworktür. ama sadece javascript kodundan oluşan ve "best practice" uygulaması gibi bir amaca yönelen kodların framework olarak anılması biraz garip..
Link to comment
Sosyal ağlarda paylaş

lol, baya komik olmus tabi javascript'ten bahsederken araya java'nin sikismasi ama eminim arkadas biliyodur farkini. Fellik fellik arayan yok bu arada; herkes hala c++ ariyo. Arada cikiyo zaman zaman ama niye java ariyolar onu da bilmiyorum... Sordugumda genelde "oyle basladik, oyle gidiyoruz" diyolar. Kendileri de bilmiyolar yani...

Turkce konusmaya kalkinca cikiyo tabi butun sorunlar. Derlemeden kastim compile idi. "Dogrudan interpreter tarafindan process edildigi icin" demek istemistim. Aradaki cizgiyi de library'nin compile time'da programa eklenmesine karsilik, interpreter'in process ederken framework'u kullanmasi arasinda cizmeye calistim ama pek beceremedim tabi.

Dedigin gibi library bircok seviyeyi birlestiriyo ve bu genelde machine language'e cevirme asamasinda gerceklesiyo. E bu isi javascript'te yapan browser'in kendisi. Herhangi bir yazilmis framework, kullanici (programi yazan kisi) tarafindan yazilmis bir kod, browser'in nasil interpret edecegine karismiyo/karisamiyo. Bu nedenle kullanicilarin yazidiklarini library olarak degerlendirmek bence yanlis. Cizgiyi boyle cizince de framework'le library'i karistirmak pek de kolay olmasa gerek.

Buna karsilik keske yazilabilse. Boylece her browser ayni sekilde karsilik verirdi.


Edit: tabi sen de simdi C interpreter diyeceksin bana, ben de kafayi karistirmaya gerek yok abicim diyecem; compile etmen gerekiyo mu gerekmiyo mu, soru ve cevabi net :)
Link to comment
Sosyal ağlarda paylaş

Konuyu biraz değiştireceğim ama..
riglous said:
lol, baya komik olmus tabi javascript'ten bahsederken araya java'nin sikismasi ama eminim arkadas biliyodur farkini. Fellik fellik arayan yok bu arada; herkes hala c++ ariyo. Arada cikiyo zaman zaman ama niye java ariyolar onu da bilmiyorum... Sordugumda genelde "oyle basladik, oyle gidiyoruz" diyolar. Kendileri de bilmiyolar yani...
...

Türkiye için mi konuştun bilmiyorum ama Java, dünyadaki en popüler dil. Çevremden takip ettiğim kadarıyla da Java bilen birisi genellikle iş bulabilir Türkiye'de de(her ne kadar Türkiye'de dünyadaki kadar popüler olmasa da).

Hatta şöyle bir liste vereyim (ki kendisi tüm dünyada takip edilen bir listedir).
http://www.tiobe.com/tpci.htm
Aylık güncellenen bir listedir. Benim bildiğim en az 1 yıldır Java açık ara birinciliğini koruyor.
Link to comment
Sosyal ağlarda paylaş

×
  • Yeni Oluştur...