Я пытаюсь вернуть результат запроса MS SQL Server в виде объекта JSON.
Запрос правильный, я также вижу результат с echo $row ['name']
, но я не получаю никакого результата с echo json_encode ( $arr )
, Страница просто остается пустой.
Это мой код:
$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 ();
Заголовок должен быть отправлен на выход. Проверьте установленное расширение (нужен php5-json).
Включить отчет об ошибках:
error_reporting(E_ALL);
Поместите заголовок перед json_encode.
header ( "Content-type: application/json;" );
echo json_encode ( $arr );
Возвращение JSON из PHP-скрипта
Отчет об ошибках на примере принимающей страницы. Внутри jQuery-скрипта для AJAX я включу отчеты об ошибках консоли следующим образом:
.fail(function( jqxhr, textStatus, error ) {
console.log(arguments);
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
});
Чтобы просмотреть эту консоль в браузере, я часто использую окна «Инструменты разработчика» в Chrome или что-то подобное. Это было неоценимо для отладки элементарных ошибок в общении. Если вы находитесь в ситуации, когда вы не возвращаете то, что ожидаете, этот тип отчетов на консоль может помочь. JSON такой же привередливый, как и все остальное в Javascript. Часто он просто замолкает.
Точно так же, чтобы показать успешные данные, которые возвращаются, вы можете сообщить через общее окно предупреждения:
success: function (data){
alert(data+" was received.");
},
var_dump, который получает и запускает страницу самостоятельно; Сравните этот результат с успехом и неудачей в JSON. Используя эти виды процедур успеха и неудачи, вы должны увидеть, если и что вы получаете обратно на пустой странице.
Еще одно изменение, которое я заметил, это то, что я обычно заканчиваю только строкой echo json encode; возможно, покончим с этим, если вы не установите какой-либо контроль потока для этого последнего бита и поместите его в свой собственный блок.
Хорошо, я наконец-то понял это. Проблема заключалась в специальных символах в таблице.
Просто добавив characterSet
в connectionInfo
помогло:
$connectionInfo = array (
"Database" => "myDB",
"CharacterSet" => "UTF-8");