Ich schrieb einen Ajax-Aufruf, der ein Array von einer .php-Datei zurückgegeben wird (wenn btn_getAnswers
geklickt wird). Das funktioniert bisher gut mit ganzzahligen Daten (aus der Datenbank). Wenn ich jedoch versuche, das Array mit drei Strings zurückzugeben, wird keine Antwort auf den Ajax-Aufruf zurückgegeben.PHP-Array korrekt JSON-Format
Index.HTML:
<!DOCTYPE html>
<html>
<head>
<script src="jquery-1.12.3.js"></script> <!-- Import the jquery extension -->
<script>
$(document).ready(function(){
$("#btn_getQuestion").click(function(){
$.ajax({type :"POST",
url: "DBCOMQUESTIONS.php?q=" + $("#input").val(),
success: function(result){ //Performs an async AJAX request
if(result){
$("#output").append(result); //assign the value of the result to the paragraph with the id "output"
}
}});
}),
$("#btn_getAnswers").click(function(){
$.ajax({type :"POST",
url: "DBCOMANSWERS.php?q=" + $("#input").val(),
dataType:"json",
success: function(result){ //Performs an async AJAX request
if(result){
result.forEach(function(i,v){
$("#output").append("<br>" + i);
})
}
}});
});
});
</script>
</head>
<body>
<p id="output">This is a paragraph.</p>
<input id="input"/>
<button id="btn_getQuestion">Question</button>
<button id="btn_getAnswers">Answers</button>
</body>
</html>
DBCOMANSWERS.php:
<?php
include("connection.php"); //includes mysqli_connent with database
include("ErrorHandler.php"); //includes error handling function
set_error_handler("ErrorHandler"); //set the new error handler
$q = intval($_GET['q']);
$sql="SELECT * FROM tbl_answers WHERE QID ='".$q."'"; //define sql statement
$query = mysqli_query($con,$sql); // get the data from the db
$result = [];
$i = 0;
while ($row = $query->fetch_array(MYSQLI_NUM)){
$result[$i] = $row[0];
$i += 1;
}
mysqli_close($con); // close connection with database
header('Content-Type: application/json');
echo json_encode($result); // return value of $result
?>
Wenn ich zuweisen $row[0]
(oder $row[2],$row[3]
) zu $result[$i]
alles funktioniert. Aber wenn ich $row[1]
zu $result[$i]
zuweisen, ist die zurückgegebene "Antwort" leer, ich schaue es auf "Netzwerk" des Standard-Chrome-Browser-Entwicklungstools.
Der einzige Unterschied zwischen $row[1]
und $row[0]
und den anderen Säulen ([2] [3]) ist, daß der Datentyp der $row[1]
VARCHAR ist und die andere sind int/Tinyint.
Offensichtlich muss der Fehler in den letzten Zeilen der .php Datei sein. Aber ich weiß nicht, was ich falsch gemacht habe.
Zu Ihrer Information: Es handelt sich um den Ajax, der aufgerufen wird, wenn die Schaltfläche mit der ID "btn_getAnswers" geklickt wird.
Dies ist der Fehler, den ich von json_encode
Malformed UTF-8-Zeichen bekommen habe, möglicherweise falsch
Am Ende Ihres PHP-Skript hinzufügen 'echo json_last_error_msg();' und sehen Sie, wenn Sie einen JSON Fehler – Machavity
@jeroen, [forEach] bekommen (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) ist eine native Array-Methode –
@jeroen gibt es eine, wie gesagt der oben gezeigte Code funktioniert absolut gut wenn ich $ row [0], $ row [2] oder $ row [3] zu $ result zuweist. @ Machavity Ich werde es versuchen. – flohdieter