Return JSON 后 MS SQL 服务器查询

Return JSON after MS SQL Server query

我正在尝试 return MS SQL 服务器查询的结果作为 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 ();

将页眉放在 json_encode 之前。

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

Returning JSON from a PHP Script

接收页面示例报错。在 AJAX 的 jQuery 脚本中,我将包含这样的控制台错误报告:

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

要在浏览器中查看该控制台,我经常在 Chrome 中使用 "Developer Tools" windows 或类似的东西。这对于调试通信中的基本错误非常有用。如果您处于未返回预期内容的情况,这种向控制台报告的类型会有所帮助。 JSON 和 Javascript 一样挑剔。它通常会突然陷入沉默。

同样,要显示返回的成功数据,您可以通过通用警报框进行报告:

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

var_dump arr 和 运行 页面本身;将该结果与 JSON 中的成功和失败进行比较。使用这些类型的成功和失败例程,您应该查看是否返回空白页以及返回什么内容。

我注意到的另一个变化是我通常只以 echo json 编码行结尾;也许就此结束,除非您对最后一位建立了一些流量控制并将其放在自己的块中。

Header 必须发送到输出。检查安装的扩展(需要 php5-json)。 启用错误报告:

error_reporting(E_ALL);

好的,我终于想通了。问题是 table.

中的特殊字符

只需将 characterSet 添加到 connectionInfo 帮助:

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