2016-04-08 11 views
0

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

+1

Am Ende Ihres PHP-Skript hinzufügen 'echo json_last_error_msg();' und sehen Sie, wenn Sie einen JSON Fehler – Machavity

+1

@jeroen, [forEach] bekommen (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) ist eine native Array-Methode –

+0

@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

Antwort

1

codierte Ich werde meinen Kommentar in eine tatsächliche Antwort, für jedermann in der Zukunft erweitern leicht sehen können.

$ row [1] muss einige Zeichen oder Daten enthalten, die nicht UTF8 sind.

So verwenden: $result[$i] = utf8_encode($row[0]);

Und es wird von json_encode parseable sein. Ich bin selbst oft auf dieses Problem gestoßen!

2

Es sieht also so aus, als ob Ihre Datenbank keine UTF-8-Zeichen speichert. Als solche müssen Sie sicherstellen, dass Sie Ihre Zeichen in UTF-8 konvertieren, bevor json_encode

$result = []; 

while ($row = $query->fetch_array(MYSQLI_NUM)){ 
    $result[] = mb_convert_encoding($row[1], 'UTF-8'); 
} 

ausgeführt wird, auf Ihre Zeichen in UTF-8 konvertieren soll. Beachten Sie, dass diese mit allen Kodierungen arbeitet, während utf8_encode() funktioniert nur auf einer