Avatar billede tvilling53 Seniormester
28. maj 2021 - 16:48 Der er 1 kommentar og
1 løsning

XMLHttpRequest fejler!.

Hej
Jeg har gennem flere dage forsøgt at få dette til at fungere uden held og så er spørgsmålet om der er fejl i koden eller det er mig der ikke forstår hvordan dette skal bruges....

I filen test-ajax.php er koden :

<button onclick="mitArray('haven')">Haven</button>
<button onclick="mitArray('familie')">Familie</button>

<script>
 
function showCustomer(str) {
  var xhttp;
  if (str == "") {
    document.getElementById("demo").innerHTML = "Tom";
    return;
  }
  xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
    document.getElementById("demo").innerHTML = this.responseText;
    var ja_data = this.responseText;
      console.log(ja_data);
   
    }
  };
  xhttp.open("GET", "test_sql.php?q="+str, true);
  xhttp.send();
}
function mitArray(str)
{ var x, txt='';
  var myArr = showCustomer(str);
  for (x in myArr) {
      txt += myArr[x].name + "<br>";document.getElementById("demo").innerHTML = txt;
    }
}

</script>

<p id="demo"></p>

I filen test_sql.php er koden:

<?php
include_once 'includes/opret_db.php';
$str = $_GET['q']; echo'<br> STR = '.$str;
$id=0; $data=[];
if(!($stmt=$mysqli->prepare('SELECT * FROM gallery WHERE orderGallery =? ')))
  { echo "<br>Prepare failed i HENT_DATA SQL <br>(".$mysqli->errno.")" .$mysqli->error;}   
  { $stmt->bind_param('s',$str);}
  if(!$stmt->execute())
  { echo "<br>execute failed i HENT_DATA SQL: (".$mysqli->errno.")" .$mysqli->error;}
  if(!($res = $stmt->get_result()))
  { echo "<br>Getting result set failed i HENT_DATA SQL:(".$mysqli->errno.")" .$mysqli->error;}
  while ($row = mysqli_fetch_array($res))
    { $data[$id]['id']=$row['id'];
      $data[$id]['title']=$row['titleGallery'];
      $data[$id]['desc']=$row['descGallery'];
      $data[$id]['name']=$row['imgFullNameGallery'];
      $data[$id]['order']=$row['orderGallery'];
      $id++;
    }print_r($data);
    $array = json_encode($data);
    echo '<br> DATA er = '.$array;
    return $array;
    $stmt->close();
?>
print_r($data); giver følgende:
Array ( [0] => Array ( [id] => 88 [title] => Billeder fra haven [desc] => [name] => gallery.6092af015962c.jpg [order] => haven ) [1] => Array ( [id] => 90 [title] => Billeder fra haven [desc] => [name] => gallery.6092af9076f06.jpg [order] => haven ) )
og $array = json_encode($data);
    echo $array; giver følgende:
[{"id":88,"title":"Billeder fra haven","desc":"","name":"gallery.6092af015962c.jpg","order":"haven"},{"id":90,"title":"Billeder fra haven","desc":"","name":"gallery.6092af9076f06.jpg","order":"haven"}]
Hvis print_r($data);  og echo $array; udkommenteres kommer der ikke noget ud på skærmen heller ikke i console.log().
Håber at der er nogen der vil hjælpe mig.
VH Thomas V
Avatar billede olsensweb.dk Ekspert
29. maj 2021 - 13:15 #1
jeg har omskrevet dine 2 filer lidt, som du kan lege med

test-ajax.php
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Untitled Document</title>
        <script type="text/javascript">
            function showCustomer(str) {
            var xhttp;
            if (str == "") {
            document.getElementById("demo").innerHTML = "Tom";
            return;
            }
            xhttp = new XMLHttpRequest();
            xhttp.open("GET", "test_sql.php?q="+str, true);
            xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
            console.log(this.responseText);
            var js_array = JSON.parse(this.responseText);

            var x, txt='';
            for (x =0, lng=js_array.length; x<lng; x++) {
            txt += js_array[x].name + "<br>";
            }
            document.getElementById("demo").innerHTML = txt;

            }
            }

            xhttp.send();
            }


        </script>
    </head>
    <body>
        <button onclick="showCustomer('haven')">Haven</button>
        <button onclick="showCustomer('familie')">Familie</button>
        <p id="demo"></p>
    </body>
</html>


test_sql.php
<?php

// start ligger normalt i connection.php / model.php / eller som her i opret_db.php
$db = "test";
$hostname = "localhost";
$username = "root";
$password = "";
$mysqli = new mysqli($hostname, $username, $password, $db);
/* check connection */
if (!$mysqli) {
    echo 'Der opstod en fejl.';
    exit();
}
$mysqli->set_charset("utf8");
// slut ligger normalt i connection.php / model.php / eller som her i opret_db.php

// include_once 'includes/opret_db.php';
$str = $_GET['q'];
$id = 0;
$error_txt = "";
$data = [];
if (!($stmt = $mysqli->prepare('SELECT * FROM gallery WHERE orderGallery =? '))) {
    $error_txt .= "<br>Prepare failed i HENT_DATA SQL <br>(" . $mysqli->errno . ")" . $mysqli->error;
} else {
    $stmt->bind_param('s', $str);
}
if (!$stmt->execute()) {
    $error_txt .= "<br>execute failed i HENT_DATA SQL: (" . $mysqli->errno . ")" . $mysqli->error;
}
if (!($res = $stmt->get_result())) {
    $error_txt .= "<br>Getting result set failed i HENT_DATA SQL:(" . $mysqli->errno . ")" . $mysqli->error;
}

$fundne = mysqli_num_rows($res);
$error_txt .= "<br>der er fundet " . $fundne;

if ($fundne == 0) {
    $data[$id]['id'] = 0;
    $data[$id]['title'] = "";
    $data[$id]['desc'] = "";
    $data[$id]['name'] = $error_txt;
    $data[$id]['order'] = "";
} else {
    while ($row = mysqli_fetch_assoc($res)) {
        $data[$id]['id'] = $row['id'];
        $data[$id]['title'] = $row['titleGallery'];
        $data[$id]['desc'] = $row['descGallery'];
        $data[$id]['name'] = $row['imgFullNameGallery'];
        $data[$id]['order'] = $row['orderGallery'];
        $id ++;
    }
}
$json = json_encode($data);
$stmt->close();
echo $json;
?>
Avatar billede tvilling53 Seniormester
30. maj 2021 - 16:17 #2
Hej
Mange tak for indsatsen.
VH Thomas V
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





Premium
Dansk hotelplatform efter fem dage langt ransomware-angreb: “Vi har lige fået at vide, at vi har 100 procent recovery på alle data”
Den danske hotelplatform AK Techotel kan efter et fem dage langt ransomware angreb snart få adgang til sin data igen, oplyser selskabet direktør til Computerworld.
CIO
Der findes ikke noget vigtigere for din virksomhedskultur end psychological safety
Klumme: Forskningen er entydig: Vidensarbejde er mere effektiv, når du tør stille spørgsmål, rejse kritik og indrømme fejl helt uden frygt for at blive straffet eller gjort til grin. Hvis du ikke har fokus på denne del af din virksomhedskultur, så lever din virksomhed og dine medarbejdere ikke op til deres fulde potentiale.
White paper
Helt nye spilleregler: Sådan får du succes på cloudrejsen
Skiftet til cloud udfordrer din forretning og stiller helt nye krav til, hvordan du håndterer projektet – teknisk og strategisk. Få overblik, råd og konkret viden her.