2016-07-15 1 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)を移動する必要があります。ヘッダ(...)の後に行を削除する(...)not usefull。 – Mimouni

+0

'echo_log'(json_encode($ arr));で配列出力を記録できますか? – alalp

+0

@alalp:私が試してみて、何もエラーがなければ、この場合のように、私は常に空のページを取得します。 – user1170330

答えて

0

OK、私はついにそれを理解することができました。問題は、表の特殊文字でした。

は単にconnectionInfocharacterSetを追加する助け:

$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

エラー報告。 AJAXのためのjQueryのスクリプト内では、私はこのような報告コンソールのエラーが含まれます:ブラウザでそのコンソールを表示するには

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

を、私はよく、「開発者ツール」Chromeのウィンドウ、またはそれのようなものを使用します。これは、通信の基本エラーをデバッグする上で非常に貴重です。あなたが期待していることを返さない状況にある場合、コンソールへのこのタイプのレポートは役に立ちます。 JSONは、Javascriptで他のすべてと同じくらい厄介です。それはしばしば静かに壊れます。

同様に、あなたは一般的な警告ボックスを通じて報告することができます戻ってくる成功したデータを表示するには:ARRと自身でページを実行

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

のvar_dumpを。その結果を成功と比較し、JSONで失敗します。これらの種類の成功と失敗のルーチンを使用すると、空白のページに戻ってきているかどうか、また何が戻ってきているのかがわかるはずです。

私が気づいたもう1つの変更点は、通常、エコーjsonエンコード線で終わることです。その最後のビットで何らかのフロー制御を確立し、それをそれ自身のブロックに入れない限り、それで終了するかもしれません。

+0

ありがとうございますが、私の場合は何も変わりませんでした。 – user1170330

+0

配列プッシュについてはどうですか?ちょうど行の代わりに$行['名前']をプッシュしようとしましたか?それは配列で配列を入れているのではないのですか?ほとんどのJSONは、キーと値のペアの1つのレベルの文字列を解析することになります。 – gladiola

+0

はい、残念ながら、変更はありません。 – user1170330

1

ヘッダーは出力に送信する必要があります。インストールされている拡張機能を確認してください(php5-jsonが必要です)。 エラー報告を有効にする:

error_reporting(E_ALL); 
+0

heeuヘッダーに関するものではありませんが、あなたの提案error_reportingはまだ問題をデバッグするための良いアイデアです。 – Mimouni

関連する問題