2016-07-15 4 views
1

Ich versuche, das Ergebnis einer MS SQL Server-Abfrage als ein JSON-Objekt zurückzugeben.Zurückgeben von JSON nach MS SQL Server-Abfrage

Die Abfrage ist korrekt, ich kann auch das Ergebnis mit echo $row ['name'] sehen, aber ich bekomme kein Ergebnis mit echo json_encode ($arr). Die Seite bleibt leer.

Dies ist mein Code:

$sql = "SELECT * FROM tab1"; 

    $stmt = sqlsrv_query ($conn, $sql); 
    if ($stmt === false) { 
     die (print_r (sqlsrv_errors(), true)); 
    } 

    $arr = array(); 
    while ($row = sqlsrv_fetch_array ($stmt)) { 
     // echo $row ['name'] . "\n"; // <- this works 
     array_push ($arr, $row); 
    } 

    echo json_encode ($arr); 

    sqlsrv_free_stmt ($stmt); 
    sqlsrv_close ($conn); 

    header ("Content-type: application/json; charset=utf-8"); 
    die (json_encode ($arr)); 
    exit(); 
+0

sollten Sie Echo json_encode ($ arr) zu bewegen; Nach dem Header (...) und entfernen Sie die Zeile sterben (...) nicht sinnvoll. – Mimouni

+0

Können Sie die Array-Ausgabe mit 'error_log (json_encode ($ arr));' kurz vor echo' protokollieren? – alalp

+0

@alalp: Was auch immer ich versuche, wenn es keinen Fehler gibt, wie in diesem Fall, bekomme ich immer eine leere Seite. – user1170330

Antwort

0

OK, ich es endlich geschafft, um es herauszufinden. Das Problem waren die Sonderzeichen in der Tabelle.

einfach characterSet in die connectionInfo Zugabe half:

$connectionInfo = array (
     "Database" => "myDB", 
     "CharacterSet" => "UTF-8" 
); 
0

Setzen Sie den Header vor dem json_encode.

header ("Content-type: application/json;"); 
    echo json_encode ($arr); 

Returning JSON from a PHP Script

Fehlerberichterstattung auf der Empfangsseite Beispiel. Innerhalb eines jQuery-Skript für AJAX, werde ich Konsole Fehler enthalten wie diese Berichterstattung:

   .fail(function(jqxhr, textStatus, error) { 
        console.log(arguments); 
        var err = textStatus + ", " + error; 
        console.log("Request Failed: " + err); 
      }); 

diese Konsole in Browser zu sehen, die ich oft „Developer Tools“ Fenster in Chrome verwenden, oder so ähnlich. Dies war für das Debuggen elementarer Fehler in der Kommunikation von unschätzbarem Wert. Wenn Sie in einer Situation sind, in der Sie nicht das zurückgeben, was Sie erwarten, kann diese Art der Berichterstattung an die Konsole helfen. JSON ist so knifflig wie alles andere mit Javascript. Es wird oft einfach zum Schweigen kommen.

In ähnlicher Weise die erfolgreichen Daten zu zeigen, dass Sie kommt wieder durch ein gemeinsames Warnfeld berichten:

    success: function (data){ 
         alert(data+" was received."); 
        }, 

Var_dump, der die Seite selbst arr und führen; vergleiche dieses Ergebnis mit dem Erfolg und scheitere im JSON. Mit diesen Arten von Erfolgs- und Fehlschlagroutinen sollten Sie sehen, ob und was Sie auf der leeren Seite erhalten.

Eine andere Änderung, die ich bemerkte, ist, dass ich normalerweise nur mit der Echo-JSON-Kodierungszeile beende; Vielleicht enden Sie damit, es sei denn, Sie stellen eine Flusskontrolle über das letzte Bit her und legen es in einen eigenen Block.

+0

Danke, aber es hat in meinem Fall nichts geändert. – user1170330

+0

Was ist mit diesem Array Push? Versucht, $ row ['name'] anstatt nur row zu drücken? Stellen Sie ein Array nicht in ein Array. In den meisten JSON-Versionen wird eine einstufige Zeichenfolge aus Schlüssel/Wert-Paaren analysiert. – gladiola

+0

Ja, aber leider ohne Änderungen. – user1170330

1

Header muss an die Ausgabe gesendet werden. Überprüfen Sie die installierte Erweiterung (benötigen Sie php5-json). Aktivieren der Fehlerberichterstattung:

error_reporting(E_ALL); 
+0

heeu es geht nicht um den Header, aber Ihr Vorschlag error_reporting immer noch eine gute Idee, das Problem zu debuggen. – Mimouni