View Single Post
Eski 17/02/2005, 12:59   #1 (permalink)
anov
Varlığa izin veren boşluk
 
anov Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 04/2004
Yer: İstanbul
Mesaj: 2,880
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, 387 views)

Enson 17/02/2005 19:53 tarihinde anov tarafından düzenlenmiştir..
anov hatta değil   Alıntı Yaparak Yanıtla