Avatar billede superb Nybegynder
20. juli 2009 - 18:08 Der er 18 kommentarer og
1 løsning

Problemer med at poste data.

Jeg har det meste af nedenstående stykke kode, fra det hæfte der hedder Ajax af Phil Ballard, men jeg kan ikke få det til at virke, nogen der kan hjælpe mig med hvor jeg går galt i byen?
Derudover, vil man bare kunne ændre GET til POST i
"mitReq.open("GET", url, true);" da jeg ikke er så meget for at smide alting ind som GET?

<script type="text/javascript">
function getXMLHTTPRequest()
{
    var req = false;
    try
    {
        req = new XMLHttpRequest();
    }
    catch(fejl1)
    {
        try
        {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(fejl2)
        {
            try
            {
                req = new ActiveXObject(Microsoft.XMLHTTMP);
            }
            catch(fejl3)
            {
                req = false;
            }
        }
    }
    return req;
}

var mitReq = getXMLHTTPRequest();
function kaldAjax() {
    var test = \'tekst\';
    var url = "index.php?post=" + test;
    mitReq.open("GET", url, true);
    mitReq.onreadystatechange = svarAjax;
    document.write("Det virker");
    mitReq.send(null);
}
</script>
    <FORM method="POST" name="ajax" action="">                 
        <INPUT type="BUTTON" value="Submit"  ONCLICK="kaldAjax()">
    </FORM>
Avatar billede majbom Novice
20. juli 2009 - 18:21 #1
hvor har du "svarAjax"?
Avatar billede majbom Novice
20. juli 2009 - 18:22 #2
og du bør bruge POST i stedet for GET, men det er sådan set ligegyldigt hvis det er sikkerhed du tænker på...
Avatar billede olebole Juniormester
21. juli 2009 - 09:27 #3
<ole>

Du skal sætte en Content-Type header:

function kaldAjax() {
    var test = \'tekst\';
    var url = "index.php?post=" + test;
    mitReq.open("post", url, true);
    mitReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    mitReq.onreadystatechange = svarAjax;
    alert("Det virker: "+mitReq.responseText);
    mitReq.send(null);
}

/mvh
</bole>
Avatar billede olebole Juniormester
21. juli 2009 - 09:29 #4
- og så er der en noget bedre XMLHttpRequest wrapper her:
    http://dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php
Avatar billede superb Nybegynder
21. juli 2009 - 16:29 #5
glemte svarajax. Den er bare
function svarAjax() {
java script:alert("SvarAjax");
}
Kan stadig ikke få det til at virke, har lagt det op på http://vilibellus.dk/facebook/test.php, der sker intet når jeg trykker på submit.
Avatar billede majbom Novice
21. juli 2009 - 18:50 #6
hos mig ser jeg altså kun linket "her" - ikke noget med nogen submit-knap...

det gør nok ikke nogen forskel, men

function svarAjax() {
java script:alert("SvarAjax");
}

skal bare være:

function svarAjax() {
  alert("SvarAjax");
}
Avatar billede superb Nybegynder
21. juli 2009 - 19:04 #7
Det fordi jeg sad og prøvede at pille ved det, har droppet den bog jeg havde fundet, selv ikke koden fra deres hjemmeside virkede.
Jeg har prøvet at pille lidt ved det efter nogle tutorials jeg fandt.
Men den retunerer stadig ikke noget, jeg troede at når man lavede det som nedenstående så ville den udskrive test fordi validate var blevet kørt og "data indsat" fordi der var lavet replace.
<?php
function validate($name) {
//mysql_query("INSERT INTO table (id) VALUES ('".$name."')") OR DIE (mysql_error());
echo "test";   
}
if(isset($_REQUEST['q'])) {     
echo validate(trim($_REQUEST['q']));
};
?>
<script type="text/javascript">
function getHttpObject() {
    if (window.XMLHttpRequest) return new XMLHttpRequest();
    if (!window.ActiveXObject) return null;
    var a = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
    var o = null;
    for (var i=0,j=a.length; i<j; i++) {
        try {
            if ( o=new ActiveXObject(a[i]) ) return o;
        }
        catch(e){};
    }
    return a = o = null;
}
function insert() {
  http.abort();
  http.open("GET", "test.php?q=1", true);
  http.onreadystatechange=function() {
    if(http.readyState == 4) {
  document.getElementById('foo').innerHTML = "data indsat!";    }
  }
  http.send(null);
}

</script>
<a href="#" onClick="insert()">Her</a>
<div id="foo">
  Hello, world!
</div>
Avatar billede majbom Novice
21. juli 2009 - 19:28 #8
din side hvorfra du laver dit ajaxkald hedder test.php
siden ajaxkaldet requester hedder test.php

det duer nok ikke rigtigt.

prøv at lave en side der hedder ajax.php og lad den indeholde:

<?php
echo "test";
?>

og ændr:

http.open("GET", "test.php?q=1", true);

til:

http.open("POST", "ajax.php", true);
Avatar billede superb Nybegynder
21. juli 2009 - 20:08 #9
hm det virker stadig ikke, hvis jeg ændrer GET til POST, hvordan sender jeg så q med?
Avatar billede majbom Novice
21. juli 2009 - 21:22 #10
ret:

mitReq.send(null);

til:

var params = 'q=1';

mitReq.send(params);

og så skal du lige have en header med, med længden af params:

mitReq.setRequestHeader("Content-length", params.length);

den skal ind før du kalder send()
Avatar billede olebole Juniormester
21. juli 2009 - 22:14 #11
Den sidste header er ikke nødvendig, men skader ikke. Dog er feltnavnene i HTTP-headers altid case sensitive: 'Content-Length'.

superb >> Du indsætter forhåbentlig ikke data direkte fra et HTTP-kald(?)
Avatar billede olebole Juniormester
21. juli 2009 - 22:16 #12
- og så er det lidt sjusket at bruge $_REQUEST. Brug $_GET, hvis du sender med metoden GET - og $_POST, hvis du bruger POST  ;o)
Avatar billede superb Nybegynder
22. juli 2009 - 10:04 #13
olebole - altså du vil have jeg skal lave escape string først eller hvad mener du?
splazz - altså sådan at jeg har nedenstående eller hvordan?
function insert() {
  http.abort();
http.open("POST", "ajax.php", true);
http.onreadystatechange=function() {
    if(http.readyState == 4) {
  document.getElementById('foo').innerHTML = "data indsat!";    }
  }
http.setRequestHeader("Content-Length", params.length);
var params = 'q=1';
http.send(params);
}
for der sker stadig ikke noget.
Avatar billede olebole Juniormester
22. juli 2009 - 10:17 #14
function insert() {
    if (http) return;
    http = new XMLHttpRequest();
    http.open("POST", "ajax.php", true);
    http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    http.onreadystatechange=function() {
        if(http.readyState == 4) {
            document.getElementById('foo').innerHTML = "data indsat!";
            http = null;
        }
    }
    var params = 'q=1';
    http.setRequestHeader("Content-Length", params.length);
    http.send(params);
}
Avatar billede olebole Juniormester
22. juli 2009 - 10:20 #15
- og i PHP-dokumentet bør du hente din variabel med:
    $myVar = $_POST['q'];
Avatar billede superb Nybegynder
23. juli 2009 - 11:37 #16
der sker stadig ikke noget, den ændrer ikke teksten til data indsat og de ting der ligger i ajax.php bliver ikke kørt http://vilibellus.dk/facebook/test.php
Avatar billede olebole Juniormester
23. juli 2009 - 12:37 #17
Hvis du ikke har slået fejlmeldinger fra i din browser - og det har du selvfølgelig ikke, når du udvikler - får du at vide, at http ikke er defineret i linje 25.

Det virker, hvis du erklærer http som global variabel og skriver:

<script type="text/javascript">
(function(){if(window.XMLHttpRequest)return;var o=null,s,
a=["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}
catch(e){}}window.XMLHttpRequest=o?function(){return new ActiveXObject(s)}:null;o=null})();

var http = null;
function insert() {
    if (http) return;
    http = new XMLHttpRequest();
    http.open("POST", "ajax.php", true);
    http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    http.onreadystatechange=function() {
        if(http.readyState == 4) {
            document.getElementById('foo').firstChild.nodeValue = "data indsat!";
            http = null;
        }
    }
    var params = 'q=1';
    http.setRequestHeader("Content-Length", params.length);
    http.send(params);
}
</script>
Avatar billede superb Nybegynder
23. juli 2009 - 15:55 #18
ah tusind tak.. smid et svar for point, dem har du virkelig fortjent, tror jeg ganske langsomt er begyndt at fatte lidt af det :)
Avatar billede majbom Novice
23. juli 2009 - 21:07 #19
godt du fik det til at virke :)
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

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