2016-07-15 92 views
1

我试图将MS SQL Server查询的结果作为JSON对象返回。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(); 
+0

你应该将回声json_encode($ ARR);在标题(...)之后并删除行死(...)不是有用的。 – Mimouni

+0

你能用'error_log(json_encode($ arr));''在'echo'之前记录数组输出吗? – alalp

+0

@alalp:无论我尝试什么,如果没有错误,就像在这种情况下一样,我总是会得到一个空白页面。 – user1170330

回答

0

好吧,我终于弄明白了。问题是表中的特殊字符。

简单地增加characterSetconnectionInfo帮助:

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

的json_encode之前把标题。在接收页例如

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

Returning JSON from a PHP Script

错误报告。里面一个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是常用3和自身运行的页面;将该结果与成功进行比较,并在JSON中失败。使用这些成功和失败例程,你应该看看你是否以及回到空白页面。

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

+0

谢谢,但它并没有改变我的情况。 – user1170330

+0

那阵列推送呢?尝试推行$ row ['name']而不是只是行?事实上,你不是把数组放入数组中吗?大多数JSON将关于解析键/值对的单级字符串。 – gladiola

+0

是的,但不幸的是,没有任何改变。 – user1170330

1

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

error_reporting(E_ALL); 
+0

heeu它不是关于标题,但你的建议error_reporting仍然是一个好主意来调试问题。 – Mimouni