Ceviz Forum

Geri Dön   Ceviz Forum > Programlama > Javascript / DHTML / Ajax

Cevapla
 
LinkBack Seçenekler
Eski 17/02/2005, 12:59   #1 (permalink)
Varlığa izin veren boşluk
 
anov Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 04/2004
Yer: İstanbul
Mesaj: 2,824
Yukarı POST(sayfa yenilenmeden) //XMLHttpRequest

XMLHttpRequest harika bir nesne, onu çok seviyorum.

edit : son mesajlarda bahsettiğim değişiklikler kodların içinde ve zip dosyasında uygulandı. (escape, Response.Charset eklendi.) kodun içine escape eklememi hatırlatan Axion a teşekkür ediyorum.

Bu sabah güne bir google araması ile başladım.
dönen sonuçlardan 2-3 tanesi çok işe yaradı.
Kodun içinde yardımcı olanların (user9 bilmeden çok yardım etti bana )
isimleri adresleri telefonları (şaka tabii telefon yok)
bulunuyor.

ben asp için deneme yaptım ama tabii ki client-side olduğu için
perl, php, zope,.... gibi dillerde de aynısı yapılabilir. (asp kodu 4 satır zaten)

DİKKAT : htm olduğuna bakıp dosyanın üzerine çift tıklamayınız.
Xmlhttprequest objesinin çalışması için onu webserver dan talep etmeniz gerekir. Kodu indirecekler için okubeni.txt de de bunu belirttim.

Kodlar :

(xmlhttp.htm)
Kod:
<!--11:15 17.02.2005
anov
mozilla ve ie de test edildi.
"made with notepad"

Yararlanılan kaynaklar :
google :-)
http://jibbering.com/2002/4/xmlhttp.js  
(xmlhttp nesnesi döndüren fonksiyon 4 satır hariç buradan kopyadır.)

http://www.sitepoint.com/forums/showthread.php?p=1618991#post1618991
(user9 un kodu istekte (request) bulunurken header bilgilerini nasıl kuracağımı gösterdi.)
-->
<html>
<head><title>Sayfa yenilenmeden post yollamak ve yanıt almak.</title>
<script language="javascript">
//fonksiyonu ben yazdım, fakat garip bir şekilde sanki ingilizce isim vermek
//daha iyi olur gibi geliyor. bir de ilk harf küçük sonraki kelimenin ilk harfi büyük oluyor ya
//(camelCase)
// bunaBayılıyorum(":-)");
function sendPost(formId,spanId)//fonksiyonun xmlhttp kısımları user9 un kodlarından gelmedir.
{
	var form = document.getElementById(formId);
	var span = document.getElementById(spanId);
	var postRequest = new String("");

	var n,v;// n -> name , v -> value
	//göndereceğimiz bilgiyi hazır edelim.
	for(var i=0;i<form.elements.length;i++)
	{
		n = form.elements[i].name;
		v = form.elements[i].value;
		postRequest += escape(n) + '=' + escape(v) + '&';//artık problem yok :).
	}

	var xmlhttp = new_xmlhttp();/**alacaklı haciz koymuş bekire of offf*/
	xmlhttp.open("POST","post.asp",true);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=iso-8859-9");
	xmlhttp.send(postRequest);
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			span.innerHTML = xmlhttp.responseText;
		}
		else
		{
			span.innerHTML = '<h1>Abi kusura bakma bir terslik oldu.</h1>';
		}
	}
	return false;//formu yollama
}/**hadi gel köyümüze geri dönelim, fadime nin düğününde halay çekelim*/


// http://jibbering.com/2002/4/xmlhttp.js
function new_xmlhttp()
{
	var xmlhttp;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	  try {
	  xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
	 } catch (e) {
	  try {
	    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (E) {
	   xmlhttp=false;
	  }
	 }
	@else
	 xmlhttp=false;
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	 try {
	  xmlhttp = new XMLHttpRequest();
	 } catch (e) {
	  xmlhttp=false;
	 }
	}
	return xmlhttp;
}
</script>
</head>
<body>
<form id="formOrnek" onsubmit="return sendPost(this.id,'spanTest')">
	<ul>
		<label for="textAd" accesskey="a"><u>A</u>d:</label>
		<input type="text" id="textAd" name="textAd"/><br/>

		<label for="textSoyad" accesskey="s"><u>S</u>oyad :</label>
		<input type="text" id="textSoyad" name="textSoyad"/><br/>

		<input type="submit" value="Gönder"/>
	</ul>
</form>
<hr/>
<span id="spanTest"></span>
</body>
</html>
(post.asp)
Kod:
<%
Response.Charset = "iso-8859-9"
Dim i
For i=1 To Request.Form.Count
	Response.Write(Request.Form.Key(i) & " = " & Request.Form.Item(i) & "<br/>")
Next
%>
Eklenmiş Dosyalar
File Type: zip xmlhttp.zip (2.5 KB, 372 views)

Enson 17/02/2005 19:53 tarihinde anov tarafından düzenlenmiştir..
anov hatta değil   Alıntı Yaparak Yanıtla
Eski 17/02/2005, 13:15   #2 (permalink)
...
 
syperusta Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 08/2004
Yer: İstanbul - Fatih
Mesaj: 259
Varsayılan

Calısmıyan satır 1 :-) (s ye basıyorum bir sey olmuyor.)
<label for="textSoyad" accesskey="s"><u>S</u>oyad :</label>
syperusta hatta değil   Alıntı Yaparak Yanıtla
Eski 17/02/2005, 13:20   #3 (permalink)
Varlığa izin veren boşluk
 
anov Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 04/2004
Yer: İstanbul
Mesaj: 2,824
Varsayılan

onu süs için yaptım.
Alt + s yapacaksın onun için.

esasına gelirsek :
Şimdiden bir problemini söyleyeyim sen yakalamadan
POST dataları birbirinden & karakteri ile ayrıldığı için text kontrollerinin içine & girdiğimizde asp yanlış algılıyor bunu.

bu problemi gideren bir versiyon hazırladım ama gelen veriyi nasıl kullanacağım konusunda fazla bir fikrim yok.

ikinci versiyon şöyle çalışıyor :
'<' + n + '>' + v + '<' + n + '>'

n -> form.elements[i].name
v -> form.elements[i].value

asp den alırken de döngü ile değil direkt

Request.Form diye alıyorum.
anov hatta değil   Alıntı Yaparak Yanıtla
Eski 17/02/2005, 13:31   #4 (permalink)
...
 
syperusta Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 08/2004
Yer: İstanbul - Fatih
Mesaj: 259
Varsayılan

kardesim onu gordum ve ilk denedigim sey o oldu.
ama o hata degil bence, daha dogrusu yaptıgın ornek post un gonderimi ile ilgili oldugu icin bu hata sayılmaz. ama formdan gelen bilgileri kaydeden bir sayfa icin hata sayılırdı.
syperusta hatta değil   Alıntı Yaparak Yanıtla
Eski 17/02/2005, 15:40   #5 (permalink)
mingitaw
 
Mingitau Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 06/2002
Mesaj: 6,109
Varsayılan

PHP Kodu:
<?
//Filtreyi oluştur
$filter = new filterData;
$filter->setKeys("adi","text","");
$filter->setKeys("yasi","integer","");

//Post katarını güvenli katara aktar
foreach($_POST as $k =>$v)
$_SECURE["_POST"][$k] = $filter->_filterData($k,$v);

//Çıktı ver
foreach($_SECURE["_POST"] as $k => $v) echo "$k =".$v."<br/>";

//Filtre sınıfı
class filterData
{
var  
$keys = array();

function 
_filterData($a,$b)
{
return 
$this->changeType($a,$this->applyRegex($a,$b));
}

function 
changeType($a,$b)
{
$b settype($b,$this->keys[$a]["type"]);
return 
$b;
}

funtion applyRegex($a,$b)
{
if(
$this->keys[$a]["regex"]!=null)
{
preg_match($this->keys[$a]["regex"],$b,$matched);
}
else
{
$matched $b;
}
return 
$matched;
}

function 
setKeys($k,$t,$r)
{
$this->keys[$k]["type"] = $t;
$this->keys[$k]["regex"] = $r;
}

?>

Enson 17/02/2005 16:51 tarihinde Mingitau tarafından düzenlenmiştir..
Mingitau hatta değil   Alıntı Yaparak Yanıtla
Eski 17/02/2005, 17:00   #6 (permalink)
...
 
syperusta Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 08/2004
Yer: İstanbul - Fatih
Mesaj: 259
Varsayılan

Bilgileri gonderirken bir filtreden gecirmek cozum olur sanırım.

n = n.replace("&","%26").replace("=","%3d")
v = v.replace("&","%26").replace("=","%3d")
postRequest += n + '=' + v + '&';

Tabi bu bir tane bulur durur global olarak degistirmesi lazım fakat ben regexp bilmiyorum.
syperusta hatta değil   Alıntı Yaparak Yanıtla
Eski 17/02/2005, 17:28   #7 (permalink)
Varlığa izin veren boşluk
 
anov Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 04/2004
Yer: İstanbul
Mesaj: 2,824
Varsayılan

arkadaşlar çok daha basit bir çözümü var.

escape() fonksiyonu. işe yarıyor.

postRequest += escape(n) + '=' + escape(v) + '&';//burada bir problem var.

bu satırı o şekilde değiştirirseniz, ne Türkçe karakterde sorun çıkar (gerçi onu iso-8859-9 ile çözdük) ne de & = gibi karakterler de.

buradan da sevineyim biraz
yihhhhuuuu bu harika bir şey. çok seviyorum bu nesneyi.
anov hatta değil   Alıntı Yaparak Yanıtla
Eski 17/02/2005, 17:51   #8 (permalink)
...
 
HunTER Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 08/2002
Yer: İstanbul
Mesaj: 8,753
Varsayılan

Gercekten cok hos bısey.. Bu sayade sayfamdakı bı cok ıframe'den kurtulabılırım.. Ve daha baska bı cok sey..

Ellerıne saglık..
HunTER hatta değil   Alıntı Yaparak Yanıtla
Eski 17/02/2005, 18:00   #9 (permalink)
Varlığa izin veren boşluk
 
anov Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 04/2004
Yer: İstanbul
Mesaj: 2,824
Varsayılan

postRequest += escape(n) + '=' + escape(v) + '&';//burada bir problem var.

bu satır halen problemli sanırım türkçe karakterleri elle tek tek değiştirmek gerekecek.
türkçe karakterlerle problem yaşanıyor fikri olan var mı?
anov hatta değil   Alıntı Yaparak Yanıtla
Eski 17/02/2005, 18:19   #10 (permalink)
...
 
syperusta Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 08/2004
Yer: İstanbul - Fatih
Mesaj: 259
Varsayılan

Ya necat efendi o turkce karakterleri
escape metodundan oluyor.

n = n.replace("&","%26").replace("=","%3d")
v = v.replace("&","%26").replace("=","%3d")
postRequest += n + '=' + v + '&';

yerine boyle bir sey problemi tamamı ile cozer sanırım.
syperusta hatta değil   Alıntı Yaparak Yanıtla
Cevapla

Bookmarks

Seçenekler

Mesaj Yazma Hakları
Yeni mesajgöndermezsiniz
Cevap yazamazsınız
Dosya ekleyemezsiniz
Mesajınızı düzenleyemezsiniz

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Benzer Konular
Konu Konuyu açana göre Forum Cevap En Son Mesaj
Sayfa Yenilenmeden katmanları göstermek MEHMET Web Tasarım 5 20/02/2007 16:16
Sayfa yenilenmeden alınan bilgi otomatik olarak değişebilir mi kitetnakre PHP 3 14/12/2006 13:12
Sayfa yenilenmeden resmin gösterilmesi? CaddeClub Javascript / DHTML / Ajax 18 23/07/2006 09:45
XmlHttpRequest ve post sorunu. PHYSiCaL_MeM Javascript / DHTML / Ajax 0 08/10/2005 19:46
selectboxları sayfa yenilenmeden mysql'den gelen verilerle ilişkilendirmek? v4mp1r3 PHP 8 31/05/2005 11:49


Forum saati Türkiye saatine göredir. GMT +3. Şu anda saat 02:02.

Reklamlar & Desteklenenler
Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv |


Forum Yazılımı: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2001 - 2008, Ceviz.net