2016-07-15 120 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