ugrás a tartalomhoz

Ajaxal JS küldése

gtoma · 2007. Júl. 18. (Sze), 08.51
Sziasztok!

Szeretnék a megrendelőnek biztosítani egy olyan lehetőséget, hogy textareába beadhasson egy js-t, amit ajaxal (prototype) küldök el a szervernek, és mentem adatbázisba. Ez pl számláló lehet.
<!-- Start of StatCounter Code -->
<script type="text/javascript" language="javascript">
var sc_project=2643532; 
var sc_invisible=0; 
var sc_partition=25; 
var sc_security="adasfsdf64c"; 
</script>

<script type="text/javascript" language="javascript" src="http://www.statcounter.com/counter/counter.js"></script><noscript><a href="http://www.statcounter.com/" target="_blank"><img  src="http://c26.statcounter.com/counter.php?sc_project=2605032&java=0&security=af51b64c&invisible=0" alt="blog stats" border="0"></a> </noscript>
<!-- End of StatCounter Code -->
Azonban az történik, hogy ez elküldéskor LEFUT a js és több ok miatt is megakad.

1) egyenlőség jel van benne, ami miatt a rendszer ugy értékeli mintha egy uj form elemről lenne szó.
2) & jel van benne
(van egy sor ami link és a számláló motorhoz mutat:
<img src="http://c26.statcounter.com/counter.php?sc_project=2605032&java=0&security=af51b64c&invisible=0" alt="blog stats" border="0"></a>
ha ez benne van a kódban akkor a post erre alakul:
sc_project=2605032&java=0&security=af51b64c&invisible=0%22%20alt
3) gyakorlatilag úgy tünik végrehajtja a js-t.

alapesetben ilyennek kellene lennie a post nak:
com=PageJSModify&value=%3C!--%20Start%20of%20StatCounter%20Code%20--%3E%0A%3Cscript%20type

itt látható is, hogy a type szónál megakad a textarea mező tartalmának elküldése.

Kérdésem az lenne, hogy van-e valami olyan js utasítás/kódolás ami letiltja a kiértékelést, és mint szöveg küldi el a tartalmat? vagy ha ilyen nincs, akkor van valami bonyolultabb megoldás?

köszi.

Üdv mindenkinek
 
1

Több lehetőséged van

zila · 2007. Júl. 18. (Sze), 08.56
1. A textarea tartalmát urlencode-olt formában küldöd el
2. GET helyett POST-tal küldöd el
3. Hasznosabb lett volna ha azt a kódod írod a hozzászólásba ami a elküldené a szervernek a textarea-t és nem a példa szöveget (ugyanis a gondod az előbbivel van, nem az utóbbival)...
2

Nem értem teljesen

gtoma · 2007. Júl. 19. (Cs), 16.00
Igazábol nem értem teljesen a válaszod... post-olom. tényleg, és nem get-elem. hogy milyen kódolással küldi, jó kérdés. PROTOTYPE-ot használok, így az én utasításom:
var myAjax = new Ajax.Request( url, { method: myMethod, parameters: myPars, onComplete: myAnswer });
ahol a myPars gyakorlatilag a textarea tartalma.

Szerintem semmilyen módon nem kódolja. hanem amit kap (ami a textareaban van) azt küldi POST-ban.

Sajnos a válaszodból nem jöttem rá mit kellene csinálnom. Kérlek amennyiben röviden el tudod mondani tedd meg.

Köszi.
3

prototype post

zila · 2007. Júl. 19. (Cs), 16.32
Prototype.js-ben ha post.tal küldöd az servernek a cuccot az valahogy így néz ki:

var out = new Ajax.Request('/ajax.php', { method    : 'post',
    								     parameters: 'module='+module,
    								     postBody  : hash.toQueryString(),
                                               onComplete: requestHandler });
A parameters mezőt get-ként teszi a server url végére így: ajax.php?module=module és ennek küldi el a postBody-ban lévő adatokat.

Nálad csak a parameters van, így hiába van post megadva a myMethod-ban, mégis get-tel küldöd :)

a hash.toQueryString() az csak annyi, hogy én egy hash-ben adom át a függvényemnek az elküldendő paramétereket és ez egy query stringet csinál ebből a hash-ből.
4

Márpedig de az post! :)

gtoma · 2007. Júl. 19. (Cs), 21.34
Köszi a reakciókat. Sajnos még nem oldódott meg a probléma. Egyébként márpedig az POST. $_GET -el nem lehet lekérni, azonban $_POST-al le lehet. Így nyilván POST-ként megy el. Vagy GET-ként megy el és valami átalakítja POST-á a php elött. Azonban a HASH lehet hogy megoldaná a problémámat. utána nézek ennek a HASH dolognak.
5

escape?

zila · 2007. Júl. 20. (P), 10.09
Akkor hagyjuk ezt a parameter/postBody dolgot ha a _post tömbbe kerül akkor tényleg post.
Azt még megteheted, hogy textarea értéket escapeled (string.escape()) mielőtt elküldöd a szervernek.
6

SIKER!

gtoma · 2007. Júl. 20. (P), 11.16
HÁt kiprobáltam azt is. Nem ment sajnos. megváltozott a kimenete a lekérésnek, de elnyomta az általam adott változókat ugyanugy.

AZONBAN! Sikerült megooldani a dolgot, bár csak sejtem, hogy mi lehetett a probléma.

Az általam írt js objektum többféle "módon" tudja küldeni a beviteli mezőket.
Az a verzióü amit használtam eddig, a textarea értékét küldte.
Ami pedig működik, az az, hogy átalakítottam form-á és a Form.serialize(ExtraID); fügvényen keresztül küldöm a tartalmat. ez érdekes módon fut mint a nyúl.

ugyhogy ez most jó.

Köszönöm az eddigi segítségedet!
7

annál egyszerűbb kicsit

Fraki · 2007. Aug. 18. (Szo), 17.19
Egyszerűbben is megy.

A method: post default, ezért elhagyható. A parameters-re pedig automatikusan applikálódik a $H(), úgyhogy annak elég csak egy hash kompatibilis valami (pl. egy objektum).

Példa:

new Ajax.Request('/ajax', {
    parameters: {
        ajaxCommand: 'insertNewsl',
        to_mnemoniks: mnemoniks.toString(),
        subject: $('subject').value
    },
    onComplete: function(req) {
    }
});