ugrás a tartalomhoz

AJAX - Küldés POSTban

Kérésre törölve 10. · 2005. Szep. 14. (Sze), 16.21
Sziasztok!
Lenne egy kérdésem. Szeretném megtudni, hogy hogyan tudok a createRequestObject osztállyal POST változókat hozzáadni a kéréshez. Mert a GET ugye nem tud korlátlan adatot küldeni az URL-ben, ezért kéne a POST. Valaki tud segíteni?
Előre is köszönöm!
__________
by ChaTeve
 
1

milyen createRequestObject?

Hojtsy Gábor · 2005. Szep. 14. (Sze), 23.02
Ez valamilyen nyelvnek beépített osztálya? Milyen nyelv? Vagy mégsincs beépítve?
2

Ezt az osztályt

Kérésre törölve 10. · 2005. Szep. 15. (Cs), 16.21
Rasmus Lerdorf cikkében használt kódot használom:
  1. function createRequestObject() {  
  2.     var ro;  
  3.     var browser = navigator.appName;  
  4.     if(browser == "Microsoft Internet Explorer"){  
  5.         ro = new ActiveXObject("Microsoft.XMLHTTP");  
  6.     }else{  
  7.         ro = new XMLHttpRequest();  
  8.     }  
  9.     return ro;  
  10. }  
  11.   
  12. var http = createRequestObject();  
  13.   
  14. function sndReq(action) {  
  15.     http.open('post''ajax.php');  
  16.     //Itt kéne a POST változók definiálását megoldani  
  17.     http.onreadystatechange = handleResponse;  
  18.     http.send(null);  
  19. }  
  20.   
  21. function handleResponse() {  
  22.     if(http.readyState == 4){  
  23.         var response = http.responseText;  
  24.         var update = new Array();  
  25.   
  26.         if(response.indexOf('|' != -1)) {  
  27.             update = response.split('|');  
  28.             var element = document.getElementById(update[0]);  
  29.             element.innerHTML = update[1];  
  30.         }  
  31.     }  
  32. }  
___________
by ChaTeve
3

naja...

Hojtsy Gábor · 2005. Szep. 15. (Cs), 17.12
Ezt nem árt tudni :) Bárki bármilyen createRequestObject() függvényt (nem objtektumot!) csinálhatna...

Namost ezt használva szépen meg kell nézni, hogy a kétféle XMLHTTPRequest mit támogat. Van nekik egy send() metódusuk, amiben karaktersorozatot meg lehet adni, és be lehet állítani fejléceket. Innentől kezve a problémát egy HTTP kérés összeállításának kérdésére redukáltuk. Be kell állítani a POST metódust, ez megvan. Be kell állítani a content-type fejlécet url kódolt adatküldésnek megfelelően, és a send() paraméterének meg kell adni az URL kódolt adatokat.
4

EZ jó?

Kérésre törölve 10. · 2005. Szep. 15. (Cs), 18.18
Kipróbáltam, ez működik:
  1. http.open('post''ajax2.php');  
  2. http.onreadystatechange = handleResponse;  
  3. http.setRequestHeader('Content-Type''application/x-www-form-urlencoded; charset=iso-8859-2');  
  4. http.send('action=foo');  
Akkor ez POST-ban küldi el, ugye?
___________
by ChaTeve
5

több böngészőn

Hojtsy Gábor · 2005. Szep. 15. (Cs), 18.23
Az elmélet az, hogy ennek működnie kell, igen. A send()-ben használt karaktersorozatok megfelelő URL kódolására kiváló függvények vannak JS-ben. Azért érdemes kipróbálni több böngészőben.
6

Így állok

Kérésre törölve 10. · 2005. Szep. 15. (Cs), 20.27
Szóval elkezdtem írni az alkalmazást, de hibába ütköztem és sehogy sem jövök rá, mi lehet a gond.
Itt van a HTML része az alkalmazásnak:
  1. <body onLoad="sndLoadReq()">  
  2. <div id="chat_status"></div>  
  3. <p align="center">  
  4.   <textarea name="chat_output" cols="100" rows="10" id="chat_output"></textarea>  
  5.  </p>   
  6.  <form method="post" onSubmit="sndInputReq(); return false;" name="Input_Form" id="Input_Form">  
  7.     <p align="center">  
  8.       <textarea name="chat_input" cols="100" rows="5" id="chat_input"></textarea>  
  9. </p>  
  10.     <p align="center">  
  11.       <input type="submit" name="Submit" value="Üzenet küldése" />  
  12. </p>  
  13. </form>  
  14. </body>  
Tudom, hogy nem túl szép, de egyenlőre még csak tervezgetek.
A headben van egy kis JavaScript rész, ami bizonyos ídőközönként meghív egy függvényt:
  1. <script type="text/javascript" language="javascript">  
  2. ID = window.setTimeout('sndUpdateReq()', 1000);  
  3. function sndUpdateReq() {  
  4.     sndGetReq();  
  5.     sndCheckReq();  
  6.     ID = window.setTimeout('sndUpdateReq()', 1000);  
  7. }  
  8. </script>  
És a JavaScript AJAX része:
  1. function createRequestObject() {  
  2.     var ro;  
  3.     var browser = navigator.appName;  
  4.     if(browser == "Microsoft Internet Explorer"){  
  5.         ro = new ActiveXObject("Microsoft.XMLHTTP");  
  6.     }else{  
  7.         ro = new XMLHttpRequest();  
  8.     }  
  9.     return ro;  
  10. }  
  11.   
  12. var http = createRequestObject();  
  13. var input;  
  14.     
  15. function utf8(wide) {  
  16.     var c, s;  
  17.     var enc = "";  
  18.     var i = 0;  
  19.     while (i < wide.length) {  
  20.       c= wide.charCodeAt(i++);  
  21.       // handle UTF-16 surrogates  
  22.       if (c>=0xDC00 && c<0xE000) continue;  
  23.       if (c>=0xD800 && c<0xDC00) {  
  24.         if (i>=wide.length) continue;  
  25.         s= wide.charCodeAt(i++);  
  26.         if (s<0xDC00 || c>=0xDE00) continue;  
  27.         c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;  
  28.       }  
  29.       // output value  
  30.       if (c<0x80) enc += String.fromCharCode(c);  
  31.       else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));  
  32.       else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));  
  33.       else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));  
  34.     }  
  35.     return enc;  
  36.   }  
  37.   
  38. function toHex(n) {  
  39.     var hexchars = "0123456789ABCDEF";  
  40.     return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);  
  41.   }  
  42. function encodeURIComponent(s) {  
  43.     var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";  
  44.     var s = utf8(s);  
  45.     var c;  
  46.     var enc = "";  
  47.     for (var i= 0; i<s.length; i++) {  
  48.       if (okURIchars.indexOf(s.charAt(i)) == -1)  
  49.         enc += "%" + toHex(s.charCodeAt(i));  
  50.       else  
  51.         enc += s.charAt(i);  
  52.     }  
  53.     return enc;  
  54.   }  
  55.   
  56. function sndGetReq() {  
  57.     http.open('post''ajax.php');  
  58.     http.onreadystatechange = handleResponse;  
  59.     http.setRequestHeader('Content-Type''application/x-www-form-urlencoded; charset=utf-8');  
  60.     http.send('action=get');  
  61.       
  62. }  
  63.   
  64. function sndInputReq() {  
  65.     http.open('post''ajax.php');  
  66.     http.onreadystatechange = handleResponse;  
  67.     http.setRequestHeader('Content-Type''application/x-www-form-urlencoded; charset=utf-8');  
  68.     http.send('action=load&action=set&uzenet=' + encodeURIComponent(document.Input_Form.chat_input.value));  
  69.     document.Input_Form.chat_input.value = "";  
  70. }  
  71.   
  72. function sndLoadReq() {  
  73.     input = prompt('Milyen néven akarsz bejelentkezni?');  
  74.     http.open('post''ajax.php');  
  75.     http.onreadystatechange = handleResponse;  
  76.     http.setRequestHeader('Content-Type''application/x-www-form-urlencoded; charset=utf-8');  
  77.     http.send('action=load&name=' + encodeURIComponent(input));  
  78. }  
  79.   
  80. function sndCheckReq() {  
  81.     http.open('post''ajax_check.php');  
  82.     http.onreadystatechange = handleResponse;  
  83.     http.setRequestHeader('Content-Type''application/x-www-form-urlencoded; charset=utf-8');  
  84.     http.send(null);  
  85. }  
  86.   
  87. function handleResponse() {  
  88.     if(http.readyState == 4){  
  89.         var response = http.responseText;  
  90.         var update = new Array();  
  91.   
  92.         if(response.indexOf('*******' != -1)) {  
  93.             update = response.split('*******');  
  94.             var element = document.getElementById(update[0]);  
  95.             if (element == 'chat_status') {  
  96.                 element.innerHTML = update[1];  
  97.             }  
  98.             else {  
  99.                 element.innerHTML += update[1];  
  100.             }  
  101.         }  
  102.     }  
  103. }  
Szóval valami chat szerűséget szeretnék csinálni, a PHP egyenlőre semmilyen hibajelzést nem ad. A JavaScript konzol viszont igen:
Hiba: uncaught exception: [Exception... "Component returned failure code: 0x804b000f [nsIXMLHttpRequest.setRequestHeader]" nsresult: "0x804b000f (<unknown>)" location: "JS frame :: ajax.js :: sndCheckReq :: line 83" data: no]
Az ajax.js a JavaScript AJAX része... Meg egy ilyet is ad:
Hiba: element has no properties
Forrásfájl: ajax.js
Sor: 99

A 99. sor:
element.innerHTML += update[1];
Próbáltam már itt a value tulajdonságot, az innerTEXT-t (ezt egy barátom mondta), de mindegyiknél ezzel a hibával jött.
Elnézést, ha kicsit túl nagy falat a problémám. Egyébként az EncodeURIComponent a Weblabortól szedtem, remélem nem baj.
___________
by ChaTeve
7

<Nincs cím>

Kérésre törölve 10. · 2005. Szep. 16. (P), 19.42
Senki nem tudja a probléma okát?
___________
by ChaTeve
8

ezt találtam

Anonymous · 2006. Május. 25. (Cs), 16.27
Note that if you want to POST data, you have to change the MIME type of the request using the following line:

http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

Otherwise, the server will discard the POSTed data.
9

prototype?

Anonymous · 2006. Május. 25. (Cs), 17.24
azt tudjuk,hogy prototype-al könnyen lehet post-ban adatot küldeni, akövetkezőképpen:
  1. var myAjax = new Ajax.Request(  
  2.             url,   
  3.             {  
  4.                 method: 'get',   
  5.                 parameters: pars,   
  6.                 onComplete: showResponse  
  7.             });  
Próbáld ki,hogy ezzel működik-e.
10

post

Anonymous · 2006. Május. 25. (Cs), 17.25
vagyis method: 'post'
elírtam:)
11

passsz

toxin · 2006. Május. 25. (Cs), 18.36
nálam müxik, szóval passsz, beírom: árvíztűrő tükörfúrógép, firebug-al nézve (fú a 0.4-es milyen lett má :) ) a post-ot

action=load&action=set&uzenet=%C3%A1rv%C3%ADzt%C5%B1r%C5%91%20t%C3%BCk%C3%B6rf%C3%BAr%C3%B3g%C3%A9p

response, meg nyilván nincs ajax_check.php nélkül (nagyon nem mélyedtem el benne mondjuk, egyébként használd ahogy írták a prototype-ot , vagy ha zavar a mérete akkor a http://moofx.mad4milk.net/#download -ban lite verzsönt , magyar doksi http://prototype.rajmi.hu/prototype.js.hu.html )