05. marts 2007 - 18:42Der er
30 kommentarer og 1 løsning
poste data til database via XmlHttp
Hej eksperter
Jeg sidder og laver et eksamensprojekt og er stødt på fast grund. Jeg skal have noget user submittet data proppet ind i en database, via xmlHttp requested. alle eksempler på nettet peger den anden vej - hvordan man trækker data ud. Jeg har prøvet at lave et simpelt eksempel for at teste om det virker. http://carsten.farving.dk/xmlHttp/
Nogen der har en idé til hvordan jeg kan få dataene flytter over via post metoden da 255 tegn ikke er sikkert det er nok.
Mvh Carsten
Source code: ================================================================= index.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Nyt dokument</title> <meta name="generator" content="TSW WebCoder"> <script language="Javascript"> function getXmlHttpObject() { try { xmlHttp = new XMLHttpRequest(); } catch(e) { try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; } function postData(data) { var msg = data; alert(msg); xmlHttp = getXmlHttpObject(); if (xmlHttp == null) { alert("Your browser doesn\'t support AJAX"); return false; } page = "test.php"; xmlHttp.open("POST",page,true); xmlHttp.send("input="+msg); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4) { document.getElementById("test").innerHTML = xmlHttp.responseText; } } } </script> </head>
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Er det ikke såkaldt fusk? Og desuden så er der en begrænsning på hvor meget der kan sendes via GET... Jeg tvivler på det maksimum bliver nået, men risikoen er der...
Men efter at have prøvet at føre mit script så tæt på ad det uden at bruge det og stadig få ingenting, så hvis nogen kan finde min fejl... har ændret i min kildekode, men den kan findes ved højreklik -> view source...
Maksimum (i IE6 !-) er såvidt jeg husker 2083 tegn, men du skal så huske, at tegn, der skal url-encodes giver 3 tegn i urlen, men op til omkring en forventet længde på omkring 1000 tegn skulle der ikke blive problemer !-)
Okay, men ville nu helst om du ikke kunne hjælpe mig med at få post til at virke? Jeg har fundet et eksempel som egentlig virker, jeg kan bare ikke få mit til at virke...
Nu har din kode jo ikke meget med AJAX at gøre - og for den sags skyld heller ikke med JavaScript =)
1) I AJAX bruger man ikke innerHTML (og det burde man nu heller ikke i andre sammenhænge) 2) Måden, du kalder dit script på, har ikke meget med noget kendt sprog at gøre (hverken den måde, du viser her - eller den måde, du bruger i eksemplet, du linker til) 3) Du må aldrig bruge navne som 'input', 'submit', el.lign. De bruges i forvejen og vil altid forvirre JavaScript.
Det lyder utroligt, det ikke skulle virke ...!?!!??!!!
Det har ikke meget med AJAX at gøre, hvis man HTML-formaterer data på serveren og indsætter dem med innerHTML på klienten. Data returneres til klienten i XML- eller JSON-format og indsættes derefter i siden med DOM
Med din form struktur og med GET så kan jeg få det til at virke. Med post så viser den kun det teskst som er predefineret i echo'et og får ikke hentet POST værdien.
Ang DOM. hvis i den div jeg referer til indsætter en paragraf, så burde jeg kunne bruge document.getElementById("test").firstChild.nodeValue = ...; right?
Tror du har ret i at det kan være min server opsætning. For medmindre at det eksempel jeg har fundet ikke har gemte kilder så virker den kode ikke på mit websted. Får simpelthen en fejl. Så vil lige prøve at forhøre mig hos min udbyder.
Har snakket lidt med support fra min udbyder, og de kunne egentlig ikke hjælpe, andet end at jeg sku forhøre mig hos dem som havde lavet det script som faktisk virkede... Så ikke meget hjælp der...
-- ikke helt rigtigt, for nodeValue vil være en textnode, som du også skal hente (og bemærk også, at et evt. linjeskift før p-tagget også vil være en node !-)
Men har omskrevet mit projekt til JSON og DOM så den del skulle gerne være i orden, men tilbage til mit post problem... ingen der har en løsning til dette?
Bruger du GET, kan du ligeså godt bruge JS/DOM uden brug af XMLHttpRequests. Prøv denne kode, der henter en JavaScript-fil: 'response.php'. Den modtager et antal GET-variabler - indsætter i/henter fra DB - og udskriver JavaScript til klienten:
<html> <script type="text/JavaScript"> function talk2server() { var o, sQ = "", aa = [], a = arguments; for (var i=0,j=a.length; i<j; i+=2) { aa.push(a[i] + "=" + escape(a[i+1])); } while (oScrLoader.firstChild) { oScrLoader.removeChild(oScrLoader.firstChild); o = null; } o = oScrTempl.cloneNode(true); o.setAttribute("src", "response.php?" + aa.join("&")); oScrLoader.appendChild(o); }
Det ser umiddelbart ud til at virke som det skal...
Problemet er bare at man kan stå i situationer hvor GET bare ikke er nok, og selvom mit webhotel ikke understøtter XML-POST's, så vil jeg nu stadig gerne lære at bruge xmlHttpRequested, selvom det kan virke som en omvej...
Men vil under alle omstændigheder kigge på eksemplet i ny og næ, da det ser interessandt ud...
Metoden har den fordel, at den også understøttes i f.eks. Mozilla- og Opera-browsere fra før, de understøttede XMLHttpRequests. Iøvrigt bør 'oprydningen' nok se sådan ud: while (oScrLoader.firstChild) { o = oScrLoader.firstChild; oScrLoader.removeChild(o); o = null; }
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.