Avatar billede gbjensen65 Nybegynder
29. august 2010 - 10:56 Der er 3 kommentarer og
1 løsning

Forms i Ajax, hvordan sender jeg svaret tilbage til DIV'en hvor input formen var ?

Jeg har oprettet en form der vises i en DIV på min HTML side, der ellers er skjult. Formen dannes af et AJAX kald, da indholdet er afhængig af 1-50 forskellige links til denne input form.
Selve AJAX kaldet og den grundlæggende behandling af formen virker godt nok, men når resultatet skal vises, kommer det i browser vinduet og ikke inde i min DIV.

jeg formoder at jeg skal skrive et nyt AJAX kald, men vil gerne høre din mening.

Her er mit første ajax kald:
function ajaxAddReview(beerid){
    var ajaxRequest;  // The variable that makes Ajax possible!
   
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4 && ajaxRequest.status==200){
           
            document.getElementById('addreviewtext').innerHTML=ajaxRequest.responseText; //skriv formen i DIV'en
        }
    }
    document.getElementById('addreview').style.display='block';  //gør DIV'en synlig
    var queryString = "?id=" + beerid;
    ajaxRequest.open("GET", "/ajax/addreview.php" + queryString, true); // Send ajax request
    ajaxRequest.send(null);
}

Min ajax form ser således ud: (har kun medtaget første del, efter initeringen)

switch ($lcnt){
        case 1:
            $user=$_SESSION['s_id'];
            $reviews=Get_user_beerrew($user,$conn)+1;
            if($reviews)
            {
                $reviews++;
                $alm=$reviews.'. anmeldelse';
            }
               
            else
                $alm="første anmeldelse";
            $beerArr=Get_beer_name($beerid,$conn);
            $beername=$beerArr['beername'];
            $brewname=$beerArr['brewname'];
            echo (utf8_encode('Hej '.$_SESSION['s_nickname'].', Du kan nu skrive din '.$alm.'<br>'));
            echo (utf8_encode('Øllen du kan anmelde her er: '.$beername.' fra '.$brewname.'<br>'));
            ?>
            <form id="addrew" name="addrew" action="ajax/addreview.php" onsubmit="return formValidator();" method="POST">
            <table width="100%" border="0">
            <tr>
                <td>Points *</td>
                <td><input id="points" name="points" type="text" value="<?php echo ($points); ?>">
                (0.0 - 10.00)</td><td><A HREF="sql/points.php" onClick="return popup_wh(this,'Points',650,600)">Se
                point definition her</A></td>
            </tr>
            <tr>
                <td>Farve *</td>
                <td><input name="farve" id="farve" type="text" length="20" value=""> Beskriv hvordan øllet ser ud</td>
            </tr>
            <tr><td valign="top">Din Anmeldelse: *</td><td colspan="2"><textarea id="tekst" name="tekst" rows="15" cols="80" style="width: 80%"><?php echo ($text); ?></textarea></td>
            </tr>
            <tr><td colspan="2"><input type="submit" value="Anmeld!"></p></td><td></td></tr>
            </table>
            <p><input name="lcnt" type="hidden" value="<?php echo "$lcnt";?>">
            <input name="beerid" type="hidden" value="<?php echo "$beerid";?>">
            </form>
           
            <?php
        break;

Det som jeg har fundet ud af er at et kald til scriptet her ikke er en brugbar løsning, men hvad gør jeg så ?
Avatar billede majbom Novice
29. august 2010 - 18:51 #1
som jeg lige ser det, henter du en helt form via AJAX?

med hvilket formål?
Avatar billede gbjensen65 Nybegynder
30. august 2010 - 21:25 #2
Hej splazz,

Ja du har noget af en pointe, efter at jeg stillede mit spørgsmål i går, har jeg arbejdet mere med problemet og kommet frem til en løsning.

I den skjulte DIV bygges formen op, og mit første ajaxrutine (ajaxAddReview) indsættes de nødvendige værdier i formen, + info til bruger om hvad der anmeldes.

I formen kaldes ajaxrutine 2 (ajaxAddReview2) som sender data til et nyt php script hvor data gemmes i databasen og resultat vises i vinduet (via ajaxAddReview2)

function ajaxAddReview(beerid){
    var ajaxRequest;  // The variable that makes Ajax possible!
   
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4 && ajaxRequest.status==200){
           
            document.getElementById('addreviewtext').innerHTML=ajaxRequest.responseText;
            // var link = '<td id="' + key +'"><a href="java script:CloseBeer(' + "'" + beerid + "','" + div + "','" + key + "')" +'";"><img src="images/close.gif" onmouseover="return overlib(\'Skjul Øldata\',WIDTH,90);" onmouseout="return nd();" border="0"></a></td>';
            // document.getElementById(key).innerHTML=link;
        }
    }
    document.getElementById('addreview').style.display='block';
    document.getElementById('submit').style.display='block';
    document.getElementById('beerid').value=beerid;
    document.getElementById('addreviewtext3').innerHTML='';
    document.getElementById('farve').value='';
    document.getElementById('points').value='';
    tinyMCE.getInstanceById('tekst').execCommand('mceSetContent', false, '');
    //document.getElementById('addreview').focus();
    var queryString = "?id=" + beerid;
    ajaxRequest.open("GET", "/ajax/addreview.php" + queryString, true);
    ajaxRequest.send(null);
}   

function ajaxAddReview2(){
    var ajaxRequest;  // The variable that makes Ajax possible!
   
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4 && ajaxRequest.status==200){
           
            document.getElementById('addreviewtext3').innerHTML=ajaxRequest.responseText;
            // var link = '<td id="' + key +'"><a href="java script:CloseBeer(' + "'" + beerid + "','" + div + "','" + key + "')" +'";"><img src="images/close.gif" onmouseover="return overlib(\'Skjul Øldata\',WIDTH,90);" onmouseout="return nd();" border="0"></a></td>';
            // document.getElementById(key).innerHTML=link;
        }
    }
    var beerid= document.getElementById('beerid').value;
    var color= document.getElementById('farve').value;
    var points= document.getElementById('points').value;
    var text=escape(document.getElementById('tekst').value);
      text=text.replace("+", "%2B");
      text=text.replace("/", "%2F");

    //var text=encodeURI(document.getElementById('tekst').value);
    var queryString = "?id=" + beerid + "&farve=" + color + "&points=" + points + "&tekst=" + text;
    ajaxRequest.open("GET", "/ajax/addreview2.php" + queryString, true);
    document.getElementById('submit').style.display='none';
    ajaxRequest.send(null);
}

Og HTML formen:

<div id="addreview">
<table cellspacing="0" style="clear:both; border:2px outset;"><tr><td style="background:#444444;"><div style="float:left; clear:left; color:#ffffff;padding-left:3px; vertical-align:middle;">Ny Ølanmeldelse</div>
<a href="java script:fw_close();">
<img style="float:right; border:1px solid #660000;" src="images/close.png" width="20" height="19" /></a></td></tr><tr><td style="padding:5px; clear:both;
border-left:1px solid #dddddd; border-bottom:1px solid #dddddd; border-top:1px solid #888888; border-right:1px solid #888888; background:#ffffff;">
<div id="addreviewtext"></div>
<div id="addreviewtext2">
<form id="addrew" name="addrew" action="java script:ajaxAddReview2();" onsubmit="return formValidator();" method="POST">
            <table width="100%" border="0">
            <tr>
                <td>Points</td>
                <td><input id="points" name="points" type="text" value=""> (0.0 - 10.00)</td><td>
                <A HREF="sql/points.php" onClick="return popup_wh(this,'Points',650,600)">Se point definition her</A></td>
            </tr>
            <tr>
                <td>Farve</td>
                <td><input name="farve" id="farve" type="text" length="20" value=""> Beskriv hvordan øllet ser ud</td>
            </tr>
            <tr><td valign="top">Din Anmeldelse:</td><td colspan="2"><textarea id="tekst" name="tekst" rows="15" cols="80" style="width: 80%"></textarea></td>
            </tr>
            <tr><td colspan="2"><input type="submit" id="submit" value="Anmeld!"></p></td><td></td></tr>
            </table>
            <div id="rewid"><input name="beerid" id="beerid" type="hidden" value=""></div>
            </form></div>
            </div><div id="addreviewtext3"></div>
</td></tr></table>

</div>

Problemet er løst, nogen gange så hjølper det jo at få det formuleret på skrift. Måske er der nogen der kan bruge dette eks. til noget!
Avatar billede majbom Novice
31. august 2010 - 06:59 #3
super, husk at få spørgsmålet lukket :)
Avatar billede gbjensen65 Nybegynder
31. august 2010 - 21:11 #4
Naturligvis, opgaven lukkes, den er jo løst af mig selv.
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