Avatar billede -zonic- Nybegynder
02. april 2009 - 17:09 Der er 11 kommentarer og
1 løsning

ajax script til postdata?

jeg har følgende ajax script, som henter data gennem innerhtml. Den kan hente alle mulige html filer ind og det hele virker fint. Jeg ville dog gerne at jeg kunne bruge scriptet til at poste data med, da jeg kun har fundet et middelmådigt script til dette formål.

Mit spørgsmål er så, er der nogen der kan hjælpe mig med at udvide scriptet således at det kan tage posts fra formularer og sende således at jeg kan opdatere min database med det? jeg giver gerne flere point hvis nogen har en god løsning!



scriptet er her.:

http://90.185.20.172/ajax/

det består af 2 js filer, ajax og ajax-dynamic-content.


jeg har indtil nu benyttet mig af følgende til at poste med.:


// JavaScript Document
  var divID = false;
  var http_request = false;
  function makePOSTRequest(url, parameters, div) {
      divID = div;
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            // set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
        }
      } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
              http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
      }
      if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
      }
     
      http_request.onreadystatechange = alertContents;
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
  }

  function alertContents() {
  var vente_tekst = "<p style='text-align: center; margin-left: -5px;'><br/><br/><img src='gfx/loading_small.gif' style='border: none;'/>";
                                vente_tekst += " <br />Henter data!<br /><br /><br /><br /><br /><br /><br /><br /><br /></p>"
                                document.getElementById(divID).innerHTML=vente_tekst;
      if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            //alert(http_request.responseText);
            result = http_request.responseText;
            document.getElementById(divID).innerHTML = result;           
        } else {
            alert('There was a problem with the request.');
        }
      }
  }


og så ved min form.:

<script type="text/javascript" language="javascript">

  function get(obj) {
      var poststr = "author=" + encodeURIComponent( document.getElementById("author").value ) +
                      "&login_coach=" + encodeURIComponent( document.getElementById("login_coach").value ) +
                    "&login_web=" + encodeURIComponent( document.getElementById("login_web").value ) +
                      "&text=" + encodeURIComponent( document.getElementById("text").value );
      makePOSTRequest('includes/information_form.php', poststr, 'informationdiv');
  }
</script>



Jeg synes dog det er en besværlig løsning, og når jeg poster af denne vej, kan jeg ikke poste én gang til på siden med tinyMCE, da det kun er det første script der kan finde ud af at hente tinyMCE ind...

Er der derfor nogen der kan hjælpe mig med at lave det første script således at det kan tage postdata?


Og til Olebole : jeg ved godt du hader innerHTML, men medmindre du kan komme med en løsning i dit famøse DOM eller JSON, så frabeder jeg mig dine kommentarer omkring innerHTML ;-)


På forhånd tak!
Avatar billede olebole Juniormester
03. april 2009 - 00:01 #1
<ole>

Det er sjældent klogt at afskære sig selv fra at lære noget nyt, så jeg tillader mig at blæse på dine ønsker  =)

ajax-dynamic-content har absolut intet med Ajax at gøre. AJAX står for Asynchronous Javascript And XMLHttpRequest - mens det såkaldte 'Ajax' script bygger på at indskrive script-tags i dokumentet. Det kan derfor aldrig laves om til at sende noget med metode post.

/mvh
</bole>
Avatar billede -zonic- Nybegynder
03. april 2009 - 01:30 #2
hmm... jeg synes bare det ser ud som om denne løsning kan bruges..:
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php

Men kan ikke helt overskue at skrive det om
Avatar billede olebole Juniormester
03. april 2009 - 09:31 #3
Jamen, det er da også noget fundamentalt andet. Det er et Ajax-script, stort set magen til dit eget script #2
Avatar billede -zonic- Nybegynder
03. april 2009 - 11:50 #4
æv bæv.. så dvs. det vil aldrig komme til at kunne lykkes?? synes bare der var visse ligheder med måden hvorpå data blev indhentet.. :-(

det var mest af alt fordi at mit første script kan finde ud af at hente javascripts ind såsom TinyMCE.... det synes ikke rigtigt at virke efter et post med det andet... :-(
Avatar billede -zonic- Nybegynder
03. april 2009 - 13:12 #5
nå.. men kongen af kongen af kode har jo nok talt så :-/ selvom vi nok aldrig får en løsning at se med det famøse DOM / JSON som grobund, som ingen på hele nettet åbenbart magter at lære fra sig... :-( Jeg må finde en anden løsning så...

smid et svar, så får du lidt point for din tid.. :-)
Avatar billede -zonic- Nybegynder
03. april 2009 - 14:01 #6
får jeg snart et svar :-)
Avatar billede olebole Juniormester
03. april 2009 - 14:35 #7
Jaja, min chef mener vist også, jeg har noget at foretage mig her  ;o)

Ajax er ikke egnet (og slet ikke tænkt) til at skulle hente applikationer som tinyMCE med, så i den forbindelse ville DOM/JSON såmænd ikke være bedre  =)

Til gengæld er Ajax forrygende til at udveksle data mellem klient og server med
Avatar billede -zonic- Nybegynder
03. april 2009 - 17:18 #8
lige et lille sidespørgsmål... :-)

hvis man har en form som denne (kig ikke på syntax)


<form>
<input name="text">test</input>
<textarea name="moretext"></textarea>
</form>


er der så mulighed for at hente værdierne af de to inputs på deres name og ikke id? jeg ved at getElementsByName returnerer en liste, men kan man få værdierne af disse inputs uden at bruge id?

det er nemlig her mit script fejler... den generer nye id'er når den henter formen ind...

kan man evt bare tage hele formen og give et navn, og at den så hiver værdierne ud på de enkelte inputs?

lige nu henter den jo på byId:

function get(obj) {
      var poststr = "author=" + encodeURIComponent( document.getElementById("author").value ) +
                      "&login_coach=" + encodeURIComponent( document.getElementById("login_coach").value ) +
                    "&login_web=" + encodeURIComponent( document.getElementById("login_web").value ) +
                      "&text=" + encodeURIComponent( document.getElementById("text").value );




på forhånd tak, oh du store orakel ;o)
Avatar billede -zonic- Nybegynder
03. april 2009 - 17:43 #9
du får alle points hvis du kan kreere et svar på hvordan jeg hiver values ved names... og endnu mere genialt hvis den kan hive alle elementers value bare ud fra et name eller evt et id på en form.. ( må bare ikke være id på selve elementerne :-) )
Avatar billede roenving Novice
03. april 2009 - 22:13 #10
.getElementsByName("text")[0] ...
Avatar billede olebole Juniormester
03. april 2009 - 22:45 #11
Vigtige metoder til at adressere et eller flere elementer med:
    document.getElementById(sId) // Returnerer et enkelt element
    document.getElementsByName(sName) // Returnerer et array af elementer
    ELEMENT.getElementsByTagName(sTagName) // Returnerer et array af elementer. Kan bruges på alle elementer

Vigtige metoder til at oprette/klone noder/elementer med:
    document.createElement(sTagName) // Returnerer et nyt element
    document.createTextNode(sText) // Returnerer en ny tekstnode
    ELEMENT.cloneElement(bRecursive) // Returnerer en klon af et element/node (bRecursive afgør, om indholdet skal klones med)

Vigtige metoder til at håndtere attributter med:
    ELEMENT.setAttribute(sName, value) // Sætter attribut på et element
    ELEMENT.getAttribute(sName) // Returnerer værdien af en attribut på et element (er altid af typen STRING)
    ELEMENT.removeAttribute(sName) // Fjerner attribut fra et element
Avatar billede olebole Juniormester
03. april 2009 - 22:52 #12
NB: getAttribute skal returnere værdien, som den står skrevet i koden - eller som den er blevet sat med setAttribute.

Bruger du den på et input elements value attribut, skal feltets defaultValue returneres. Evt. brugerændringer må ikke afspejles. Det samme gælder for checked attributten, m.fl.
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