Avatar billede hanibald Mester
03. februar 2015 - 22:43 Der er 8 kommentarer og
1 løsning

AJAX: Form request - simpelt response

OS: Windows 7 prof.

Som indgang til at anvende ajax har jeg arbejdet med funktionalitet, der kan overføre form-data til PHP efter post-metoden og returnere en PHP-variabel til brug som HTML-tekst.
Baseret på videoer fra Youtube har jeg opbygget nedenstående kodebidder:

<form action="ajaxformphp.php" method="post" class="ajax">
  <div><input type="text" name="name" placeholder="dit navn"></div>
  <div><input type="text" name="email" placeholder="din email"></div>
  <div><textarea name="message" placeholder="din meddelelse"></textarea></div>
  <input type="submit" value="Send">
</form>

<div class="response">
<p id="resp"></p>
</div>



<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script language="javascript" type="text/javascript">
$('form.ajax').on('submit', function()
{
  var that = $(this), //this = aktuelt objekt (formen)
      url = that.attr('action'),
      type = that.attr('method'),
      data = {};
   
  that.find('[name]').each(function(index, value)) {
      var that = $(this),
        name = that.attr('name'),
        value = that.val();

      data[name] = value;
  });

  $.ajax({
      url: url,
      type: type,
      data: data,
      dataType: 'json',
      success: function(response) {
        $(#resp).html(response);   
      }
  });

  return false;
}); // submit slut
</script>
-----------

ajaxformphp.php:

<?php
if (isset($_POST['name'], $_POST['email'], $_POST['message']))
{
// Her skal indsættes kode til viderebehandling i PHP-regie

//echo 'Navn er ' . $_POST['name'];

$response = "Response";

}
?>

--------

Trods intensiv kontrol mod kildekoden og mange forskellige forsøg har jeg ikke kunnet få koden til at fungere.

Kan nogen hjælpe mig med at afdække, om det er konceptet eller mindre detaljer der hindrer programmerne i at fungere?


Hanibald
Avatar billede keysersoze Guru
03. februar 2015 - 23:51 #1
"ikke kunnet få koden til at fungere" - hvad sker der eller sker der ikke? javascript-fejl? kommer du ikke ind i din submit-event? eller?
Avatar billede hanibald Mester
04. februar 2015 - 09:44 #2
jeg har ingen erfaring at bygge på, men jeg har en fornemmelse af, at scriptet måske slet ikke er aktiveret.

Opbygningen af scriptet er "solgt" som så "smart" at hvis det ikke fungerer så overtager den grundlæggende POST-funktionalitet automatisk.

Funktionaliteten i scriptet skulle endvidere gøre, at det virker uændret hvadenten formen indeholder 1 eller mange input-linier med samme "name"

Youtube: https://www.youtube.com/watch?v=GrycH6F-ksY


Hanibald
Avatar billede keysersoze Guru
04. februar 2015 - 09:56 #3
Kig på din developer toolbar - http://www.web-dev.dk/post/2012/06/17/Bliv-en-hurtigere-webudvikler-med-browserv230;rkt248;jer.aspx - eller kom med et link så vi kan se det i funktion.
Avatar billede olsensweb.dk Ekspert
04. februar 2015 - 10:13 #4
der kan overføre form-data til PHP
jeg tror du kan få glade af serialize

jeg har omskrevet dit program, prøv det og leg med det

html
     
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>demo</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <script type="text/javascript">
            // http://api.jquery.com/jquery.ajax/
            // http://api.jquery.com/serialize/
            // http://api.jquery.com/submit/
            $(document).ready(function () {
                    // alle forms, vil jeg nok ikke bruge
                    $("form").on('submit', function (event) {
                // $("#target").on('submit', function (event) {
                    var params = ($(this).serialize());
                    var url = "ajaxformphp.php";
                    $.ajax({
                        type: "POST", // type: "GET"
                        url: url,
                        data: params
                    })
                    .done(function (response) {
                      $("#resp").html(response);
                    });
                    event.preventDefault();
                }); // submit slut




            });
        </script>
    </head>
    <body>
        <form id="target">
            <div><input type="text" name="name" placeholder="dit navn"></div>
            <div><input type="text" name="email" placeholder="din email"></div>
            <div><textarea name="message" placeholder="din meddelelse"></textarea></div>
            <input type="submit" value="Send">
        </form>

        <div class="response">
            <p id="resp"></p>
        </div>
    </body>
</html>


ajaxformphp.php
     
<?php
// de 3 variabler bliver altid sendt med over, så brug af isset er unødvendigt
if (isset($_POST['name']) && ($_POST['name'] !== "") && isset($_POST['email']) && ($_POST['email'] !== "") && isset($_POST['message']) && ($_POST['message'] !== "")) {
    echo 'Navn er ' . $_POST['name'];
} else {
    echo "mangler parameter";
}
?>


men du skal være opmærksom på at det ikke er god skik at overfører HTML, det rigtige er at overfører rå data som XML eller JSON, og formaterer vha JS
Avatar billede hanibald Mester
04. februar 2015 - 20:42 #5
Til Ronny


Først den korte:    BINGO


Efter lidt klippe / klistre og den indtastede tekst blev vist som den skal.

Jeg var ikke klar over 'god skik' omkring datatype for response.

Ronny har du mulighed for - og også energi til, at give mig de kodelinier jeg skal bruge for at lave response med JSON?
Har du evt. også et link eller to (dansk / engelsk) til 'formattering med js'?

Tak for hjælpen



Til keysersoze: Jeg har brugt developer toolbar lidt, men fandt ikke rigtig nogen hjælp.
Avatar billede olsensweb.dk Ekspert
04. februar 2015 - 21:29 #6
har du mulighed for - og også energi til, at give mig de kodelinier jeg skal bruge for at lave response med JSON?

hurtig omskrevet
html
     
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>demo</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <script type="text/javascript">
            // http://api.jquery.com/jquery.ajax/
            // http://api.jquery.com/serialize/
            // http://api.jquery.com/submit/
            // http://api.jquery.com/jquery.getjson/
            $(document).ready(function () {
               
               
                // $("#target").on('submit', function (event) {               
                $("form").on('submit', function (event) {               
                    var this_form = $(this);
                    var type = this_form.attr('method');
                    var url = this_form.attr('action');
                    // var url = "ajaxformphp.php";
                    // var params = ($(this).serialize());
                    var params = this_form.serialize();
                    $.ajax({                       
                        // type: "POST", // type: "GET"
                        type: type,
                        url: url,
                        dataType: "json",
                        data: params
                    })
                    .done(function (response) {
                        // data kommer over som et json array
                        // her laves html formatering vha js
                        var str ="";
                        str +="<div>";
                        if(response.error==0){
                            str +="navnet er "+response.navn+ "<br>";
                            str +="beskeden er fra  "+response.mail+ "<br>";
                            str +="beskeden lyder "+response.msg+ "<br>";
                        }
                        else{
                            str +="fejl beskeden lyder "+response.msg+ "<br>";
                        }
                        str +="</div>";
                        $("#resp").html(str);
                    });
                    event.preventDefault();
                }); // submit slut




            });
        </script>
    </head>
    <body>
        <form id="target" method="POST" action="ajaxformphp.php">
            <div><input type="text" name="name" placeholder="dit navn"></div>
            <div><input type="text" name="email" placeholder="din email"></div>
            <div><textarea name="message" placeholder="din meddelelse"></textarea></div>
            <input type="submit" value="Send">
        </form>

        <div class="response">
            <p id="resp"></p>
        </div>
    </body>
</html>



ajaxformphp.php
     
<?php
if (isset($_POST['name']) && ($_POST['name'] !== "") && isset($_POST['email']) && ($_POST['email'] !== "") && isset($_POST['message']) && ($_POST['message'] !== "")) {
    $ar = array("error"=>0, "navn"=>$_POST['name'], "mail"=>$_POST['email'], "msg"=>$_POST['message']);   
} else {
    $ar = array("error"=>1, "msg"=>"mangler parameter");   
}
echo json_encode($ar);
?>



Har du evt. også et link eller to (dansk / engelsk) til 'formattering med js'?
det er jo "bare" alm html og evt css lavet med js/jquery,  kig hvad jeg har lavet i .done(function (response)
Avatar billede hanibald Mester
05. februar 2015 - 19:46 #7
Tusind tak.

Nu mangler jeg blot et svar jeg kan "pointere".
Avatar billede olsensweb.dk Ekspert
05. februar 2015 - 21:20 #8
du får et svar her.


du kan læse
lidt om AJAX her
http://www.udvikleren.dk/artikler/374/dynamisk-indhold-med-ajax-og-php/

lidt om CSS vha jquery
http://api.jquery.com/css/
http://api.jquery.com/addclass/
http://api.jquery.com/removeclass/

lidt om CSS vha js
http://www.w3schools.com/js/js_htmldom_css.asp

som du nok kan se er AJAX ca 75% clientside (HTML/CSS/JS) med hoved vægten på JS og 25% serverside (PHP/.....)
Avatar billede hanibald Mester
07. februar 2015 - 16:25 #9
Jeg kan se, at du også har givet mig en "traditionel" submit. Tak for det.

Hanibald
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