» »

Pošiljanje podatkov - Ajax (post) v php file

Pošiljanje podatkov - Ajax (post) v php file

WarMaker ::

Pozdravljeni,
imam en večji problem, ki ga nikakor ne morem rešiti. Problem je v tem, da imam neke inpute in textaree, kateri niso v FORM-i in bi rad shranil njihove vrednosti. Sistem, ki sem se ga lotil deluje na tak način:

Ob kliknu na link/gumb se sproži (onclick='saveAnswers()'), ki pa vsebuje zgenerirano kodo za vsak input posebej (katere vrednosti naj zabeleži) in si jih shrani v var-e. To je vse skupaj en velik javascript, zdaj pa za vsak ta zabeležen odgovor želim poslati preko ajaxa v file 'save-answers.php', kjer preko POST metode prejmem informacije in jih shranim v database.

Primer kode:
...
<input type='text' name='nekoime' value='Besedilo' />
...
<script>
function saveAnswers() { 

//ta del kode se zgenerira za VSAK input/textarea
... koda, ki prebere vrednost inputa in ga shrani v "var save_answer" ..
... Sedaj pa koda za ajax send - $.ajax({ type: "POST", url: "save-answers.php", data: "answerID=...&answer=" + save_answer});
//Konec kode

}
</script>


Stvar dejansko dela, ampak ne kot bi morala. V IE8 deluje 100%, v operi mi kakšenkrat shrani pravilno, kakšenkrat moram it nazaj na page in 10x refreshat stran, da SHRANI v DB (kot, da ne bi sprožilo vseh ajax-ov in jih ima v cacheju, ki jih naknadno sproži, huh?), v FF sploh ne dela, v Chrome niti, safari pa nisem probal.
Zadevo sem naredil tako zato, da bom kasneje lahko implementiral auto-save.

V operi se zgodi, da se kakšen odgovor shrani, kakšen ne, pa potem po refreshu se shrani itd. Weird stuff going on.

Lahko bi se rešil te javascript zadeve tako, da bi dal vse inpute v formo in po POST-u enostavno prebral vrednosti ter jih shranil, vendar nastane problem, ker imam med temi inputi še druge forme, in če imam formo v formi, potem zunanja ne dela.

Primer:

<form action='...' method='post' ...> //To bi bila glavna forma

   <form ...> //To bi bila druga forma
   <input type='submit' ... />
   </form>

<input type='submit' ... />
</form>


Kako bi lahko naredil, da mi notranji button sproži notranjo formo, medtem kot pa zunanji button zunanjo formo? Torej, da bi jih ločili med sabo s kakšnim IDjem? (rešitev jquery - .submit()?)

Ne vem več kaj storiti :).

lp

HardFu ::

http://codeable.io

MrBrdo ::

ne dajat nikol javascripta kr tko v script tage ampak ga dej v svoj fajl in sicer v tvojem primeru najprej dej v DOM loaded (v jquery je to $(function() { ... });) al pa celo v $('#idfielda').change(function() { ... }); event.
MrBrdo

WarMaker ::

HardPhuck: Hvala za link, sploh nisem pomislil, da bi postal z jqeury-jem. Sem moral še par counterjev dodat itd, ampak sem usposobil, da dela povsod. (V operi mi je redirectalo/linkalo preden sem dobil odgovor nazaj.) Kakorkoli že, rešeno, hvala.
MrBrdo: Da, to sem tukaj dal samo primer. Hvala za nasvet vseeno :)

lp

Gost ::

MrBrdo je izjavil:

ne dajat nikol javascripta kr tko v script tage ampak ga dej v svoj fajl in sicer v tvojem primeru najprej dej v DOM loaded (v jquery je to $(function() { ... });) al pa celo v $('#idfielda').change(function() { ... }); event.


Zakaj? A zaradi nalaganja iz cache-a brskalnika? Kodne lepote?

Včasih je enostavneje vreči script tag kar v sredino body-ja, preden napišeš ločen jquery plugin za nekaj malenkosti na točno določeni strani, ki je izjema. Je pa res, da je večinoma obvezno izvajati javascript kodo znotraj $(document).ready() oz. ko je DOM pripravljen. Tudi nisem zasledil, da ima kak standard zahtevano javascript kodo samo znotraj svojih file-ov in head-a.

MrBrdo ::

Zarad code seperationa. Javascript ne spada v HTML, to je pač en design rule ki ga dobri developerji imajo.
Unobtrusive JavaScript @ Wikipedia (tu sicer je bolj povdarek na inline javascriptu vendar tudi to spada zraven da imas js ločeno)
In the article Langridge argues for a way to keep all JavaScript code, including event handlers, outside of the HTML.
MrBrdo

Zgodovina sprememb…

  • spremenilo: MrBrdo ()

HardFu ::

WarMaker: np.
http://codeable.io

Gost ::

MrBrdo, zanimivo. Hvala za info - imaš prav, ja. Bom moral spet narediti malo refactoringa.

Lion29 ::

lahk samo izkoristim tukaj priloznost in recem, da....

JQUERY RULEZ !


thank you for letting me say it!
Founder and CTO @ Article-Factory.ai

WarMaker ::

Okej, dejansko se je izkazalo, da v IE in Operi dela. Moram še malo pogledat kodo, zakaj mi FF in Chrome nagajata.

Kakorkoli že, trenutno imam sredi html-ja zgenerirano javascript kodo, ker dejansko potrebujem podatke, ki jih PHP prebere iz DB. Sicer mi ni popolnoma jasno, kako bi lahko to kodo izločil v poseben .js file, saj kot sem že omenil, potrebujem podatke iz query-ja. Hm hm?

Bom jutri še malo preštudiral zadevo, pa poročam. Hvala še enkra za pomoč, se bom še kaj javil (za naknadne probleme:D)

HardFu ::

http://codeable.io

MrBrdo ::

WarMaker: take podatke se podaja v JavaScript preko raznih HTML atributov... odvisno je zdaj kakšni so ti podatki. recimo če so to neki podatki ki jih prikažeš potem v nekem divu, lahko narediš recimo:
<div id="some_content" data-content-moje="bla bla bla"></div>

Potem pa imaš v ločenem javascript fajlu kodo ki poišče vse dive ki imajo ta atribut in potem narediš karkoli že.

Če pa gre za neke bolj splošne podatke pa se doda meta tag v HEAD:
<meta name="moji-podatki" content="<?php whatever ?>" />

Uporaba teh podatkov je podobno kot v zgornjem primeru.
MrBrdo

fizikalac ::

JAVASCRIPT:

Uporabi onclick="" da zabeleži kateri gumb je bil pritisnjen in onsubmit="" da preveri, katera forma se mora submitat :)

WarMaker ::

fizikalac je izjavil:

JAVASCRIPT: Uporabi onclick="" da zabeleži kateri gumb je bil pritisnjen in onsubmit="" da preveri, katera forma se mora submitat :)


Za imet 2 formi? Hm, dobro no, saj v bistvu sem že rešil problem na zelo lep način (spisal novo javascripto in samo zgeneriral klice s PHPjem). Sedaj deluje v vseh browserjih.

Hvala vsem za pomoč

Lion29 ::

ma v bistvu je zadeva zlo preprosta...

1. po rpavilni sintaksi form elementi nimajo kaj iskat izven forme

2. torej na stran das eno formo, ki vsebuje vse tvoje elemente in ji dolocis class="ajaxpost"..

potem v jquery bloku "ukrades" default post event formi

$('.ajaxpost').submit(function(){
....
  return false;
});


in pikice zamenjas s proceduro za fetch podatkov in za poslat podatke prek ajax POSTa...

torej

var data = $(this).serializeArray();
$.post('/myurl/save.php', data, function(result){
});


preprosto ku pasulj
Founder and CTO @ Article-Factory.ai

WarMaker ::

Lion29 je izjavil:

ma v bistvu je zadeva zlo preprosta...

1. po rpavilni sintaksi form elementi nimajo kaj iskat izven forme

2. torej na stran das eno formo, ki vsebuje vse tvoje elemente in ji dolocis class="ajaxpost"..

potem v jquery bloku "ukrades" default post event formi

$('.ajaxpost').submit(function(){
....
return false;
});


in pikice zamenjas s proceduro za fetch podatkov in za poslat podatke prek ajax POSTa...

torej

var data = $(this).serializeArray();
$.post('/myurl/save.php', data, function(result){
});


preprosto ku pasulj


Hehe, vidim ja. Samo moraš najt nekoga, ki ti zadevo tudi na tako enostaven način razloži. :)

Lion29 ::

prosim

pa seveda brez teh BR-jev.... ne vem zakaj jih je fliknlo not
Founder and CTO @ Article-Factory.ai


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

AJAX kratke naloge

Oddelek: Izdelava spletišč
192297 (1764) Yacked2
»

Jquery

Oddelek: Izdelava spletišč
151814 (1538) mk818764
»

jquery in div-i (strani: 1 2 )

Oddelek: Izdelava spletišč
8711341 (10079) lisjak
»

Download vsebine strani s JS

Oddelek: Izdelava spletišč
472567 (1865) MrBrdo
»

JavaScript + fade

Oddelek: Izdelava spletišč
161907 (1542) arjan_t

Več podobnih tem