Avatar billede hrole Mester
25. oktober 2009 - 17:06 Der er 6 kommentarer og
1 løsning

ajax og php: sende flere variabler, hjælp til udbygning af script

hej,
jeg er netop begyndt at snuse lidt til ajax. Jeg har fundet følgende script som jeg har forsøgt at udbygge. Jeg ønsker at sende flere værdier med POST, og troede derfor løsningen var at indsætte de linier jeg har markeret med fed, men det fungerer ikke. Kan i hjælpe?
<html>
<head>
<title>PHP using AJAX</title>
<script type="text/javascript">

var time_variable;

function getXMLObject()  //XML OBJECT
{
  var xmlHttp = false;
  try {
    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")  // For Old Microsoft Browsers
  }
  catch (e) {
    try {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")  // For Microsoft IE 6.0+
    }
    catch (e2) {
      xmlHttp = false  // No Browser accepts the XMLHTTP Object then false
    }
  }
  if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();        //For Mozilla, Opera Browsers
  }
  return xmlHttp;  // Mandatory Statement returning the ajax object created
}

var xmlhttp = new getXMLObject();    //xmlhttp holds the ajax object

function ajaxFunction() {
  var getdate = new Date();  //Used to prevent caching during ajax call
  if(xmlhttp) {
      var txtname = document.getElementById("txtname");
      var age = document.getElementById("age");
    xmlhttp.open("POST","testing.php",true); //calling testing.php using POST method
    xmlhttp.onreadystatechange  = handleServerResponse;
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlhttp.send("txtname=" + txtname.value); //Posting txtname to PHP File
    xmlhttp.send("age=" + age.value);
  }
}

function handleServerResponse() {
  if (xmlhttp.readyState == 4) {
    if(xmlhttp.status == 200) {
      document.getElementById("message").innerHTML=xmlhttp.responseText; //Update the HTML Form element
    }
    else {
        alert("Error during AJAX call. Please try again");
    }
  }
}
</script>
<body>
<form name="myForm">
<table>
<tr>
  <td>Enter Name</td>
  <td><input type="text" name="txtname" id="txtname" /></td>
</tr>
<tr>
  <td>Enter age</td>
  <td><input type="text" name="age" id="age" /></td>
</tr>

<tr>
  <td colspan="2"><input type="button" value="Submit" onClick="ajaxFunction();" /></td>
</tr>
</table>
<div id="message" name="message"></div>
</form>
</body>
</head>
</html>
Avatar billede Slettet bruger
25. oktober 2009 - 18:11 #1
Prøv dette
    xmlhttp.send("txtname=" + txtname.value + ", age=" + age.value); //Posting txtname and age to PHP File

Så kan du i PHP splitte dem igen, f.eks. med explode(", ", $_POST['data'))
Avatar billede tjens Nybegynder
25. oktober 2009 - 18:41 #2
Løsningen er at opbygge en streng med alle parametre og kun have 1 send.

Der var også 2 felter i løsningen i dette spørgsmål:
http://www.eksperten.dk/spm/890356#reply_7474343
Avatar billede Slettet bruger
25. oktober 2009 - 18:44 #3
#2, som jeg skrev i #1 :)
Avatar billede tjens Nybegynder
25. oktober 2009 - 19:04 #4
#3 Næsten: Jeg bruger ? og & notation i strengen, så hvert felt bliver til en post-variabel direkte.

Dermed bliver explode/split ikke nødvendigt i serverscriptet.
Avatar billede Slettet bruger
25. oktober 2009 - 22:39 #5
Ja, du har ret.
Er så vant til at bruge et Javascript framework til den slags ting at jeg nogle gange glemmer det mest basale :P
Avatar billede hrole Mester
26. oktober 2009 - 20:02 #6
Da kimsey0 var først må pointene falde til ham. Tjens: jeg kan nu se hvad du mener, men jeg er ikke helt så stærk i sproget.
Avatar billede Slettet bruger
30. oktober 2009 - 17:18 #7
Et svar fra mig, hvis du er klar til at lukke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester