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