Возврат JSON после запроса MS SQL Server

Я пытаюсь вернуть результат запроса 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 ();

1

Решение

Заголовок должен быть отправлен на выход. Проверьте установленное расширение (нужен php5-json).
Включить отчет об ошибках:

error_reporting(E_ALL);
1

Другие решения

Поместите заголовок перед 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; возможно, покончим с этим, если вы не установите какой-либо контроль потока для этого последнего бита и поместите его в свой собственный блок.

0

Хорошо, я наконец-то понял это. Проблема заключалась в специальных символах в таблице.

Просто добавив characterSet в connectionInfo помогло:

$connectionInfo = array (
"Database" => "myDB",
"CharacterSet" => "UTF-8");
0
По вопросам рекламы [email protected]