Gå til innhold

Variabel over til PHP fra javascript


Anbefalte innlegg

Spurte i PHP seksjonen men fikk igrunn ikke et klart svar, så da spør jeg her og!

 

Jeg har en variabel i java script:

 

<script type="text/javascript">

var testVar = "JEG ER EN TEST";

</script>

 

<input type="submit" value="Submit">

 

Hvordan får jeg dette over til php? Scriptet over er litt mer omfattende og er basert på Yahoo UI hvor jeg har laget en nice listbox med flere kollonner. Y UI er javascript og meninga er at valgte element skal slettes fra en databasen (med php). Siden det er php må det gjøres på postback. Men igjen: hvordan henter jeg testVar på postback / hvordan lagrer jeg innholdet i en phpvariabel / hva er den enkleste metoden ??

Lenke til kommentar
Videoannonse
Annonse

For å overføre en variabel fra klienten (javascriptet på brukerens maskin) til serveren, må du bruke et post eller et get kall.

 

Det smidigste er nok Ajax som allerede er nevnt. Ajax bruker et post eller et get-kall uten at brukeren merker det. Hvis du vil lære hvordan du bruker Ajax kan du lese her: http://www.w3schools.com/ajax/default.asp her finner du også kode du kan klippe og lime fra.

 

Alternativet er et post eller get kall til server, som overfører variabelen din og tar deg til en ny side eller refresher siden din, det er sannsynligvis det enkleste, men definitivt ikke det mest brukervennlige.

Lenke til kommentar
Finnes det ikke en metode som ikke bruker Ajax?

 

Dette er i sammenheng med et prosjekt, og har en deadline. Jeg kan heller i ettertid vurderer å bruke Ajax.

 

Hvis du bruker prototype.js eller jQuery, vil det å sende av gårde variabelen være gjort med to-tre linjer.

 

new Ajax.Request('/etphpscript.php', {
method: 'get',
parameters: { var: testVar }
 }
);

 

Dette eksempelet bruker prototype og sender av gårde en GET på følgende form:

 

/etphpscript.php?var=<innholdet_i_testVar>

 

Edit

 

Med Yahoo UI (som jeg forøvrig aldri har brukt) er det tydeligvis enda enklere:

 

YAHOO.util.Connect.asyncRequest('POST', 'script.php', callback, 'var=' + testVar);

 

callback-variabelen peker til et object, i dette eksempelet på formen:

 

var callback = {
 success: { ... }, 
 failure: { ... }, 
 scope:   { ... } 
};

 

Hilsen Werner

Endret av wernie
Lenke til kommentar

Eg har skreve nokre ajax metoder for å sende postdata asynkront.

 

Tatt frå min heimeside når ein bruker skriver ein kommentar til ein nyheitstittel

 

// Hent data først frå formen
var content = document.getElementById("comment_c").value;
var postedBy = document.getElementById("postedBy_c").value;
var topic = document.getElementById("topic_c").value;
// Her bygger vi postdata streng
buildPostData("content",content);
buildPostData("postedBy",postedBy);
buildPostData("topic",topic);
buildPostData("news.id",args['news']);
postData("http://olavgg.com/website_that_handles_postdata.gsp", getPostData());

//Opprett HTTPRequest objektet
try 
{
 request = new XMLHttpRequest();
} catch (trymicrosoft) {
 try {
request = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (othermicrosoft) {
try {
  request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
  request = null;
}
 }
}

// Send Postdata asynkront
function postData(url, data)
{
 request.open("POST", url, true);
 request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
 request.onreadystatechange = function() { update(); };
 request.send(data);
}

/* --------------------------------------------------------------
* Postdata functions.
-------------------------------------------------------------- */
function buildPostData(postID, value)
{
if (this.postdata == null) this.postdata = "";
this.postdata = this.postdata + postID +"="+value+"&";
}
function getPostData()
{
this.postdata = encodeFormData(this.postdata);
return removeLastChar(this.postdata);
}
function resetPostData()
{
this.postdata = "";
}
function encodeFormData(data)
{
var regexp1 = /%20/g;
data = encodeURI(data).replace(regexp1,"+");
return data;
}

function update() 
{
 if (request.readyState == 4)
 {
  if(request.status == 200)
  {
	  alert("Success!");
}
}

 

Ikkje optimal kode, men fungerer greit.

Lenke til kommentar

Eller hvis du tenker litt utenfor boksen kan du la javascript sette en cookie som php kan lese ved neste request.

 

eller:

 

<script type="text/javascript">
var testVar = "JEG ER EN TEST";
</script>

<form id="myForm">
<input type="hidden" name="testVar" id="testVar" value="">
<input type="button" value="Submit" onclick="document.getElementById('testVar').value = testVar; document.getElementById('myForm').submit()">
</form>

Lenke til kommentar
du kan også sende data fra javascript til php ved hjelp av cookies. ha gjort det selv på hjemmesiden min og kan poste kosen som trengs når jeg kommer hjem hvis du vil ha.

 

Så det er altså masse kos som skal til for å sende data fra javascript til PHP? Kan du forklare hvordan dette virker? Hva skal koses med for at det skal fungere? ;)

 

Werner

Endret av wernie
Lenke til kommentar

<script type="application/x-javascript">

// setCookie fra www.w3schools.com
function setCookie(c_name,value,expiredays) {
 var exdate=new Date();
 exdate.setDate(exdate.getDate()+expiredays);
 document.cookie=c_name+ "=" +escape(value)+
 ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());

}

var testVar = "JEG ER EN TEST";

setCookie('testVar', testVar, null);

</script>

 

leses fra php med $_COOKIE('testVar') etter neste request.

Lenke til kommentar
  • 4 måneder senere...

Hva om jeg har 9 streng-variabler som jeg skal sende til*bake* til javascript fra php?

 

 

PHP-scriptet blir kjørt av AJAX, og jeg får vanligvis tilbake infoen i form av responseText.

Problemet er at jeg i utgangspunktet hadde en ferdig HTML-bit i den teksten, noe som får IE til å kalle noe så generelt som en "runtime error", når jeg putter den inn vha innerHTML.

 

Så, løsningen skal være JSON, noe jeg aldri har vært borti.

Det gjelder forsåvit AJAX også, som jeg prøvde første gang i kveld.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...