0

PHP から Javascript に JSON を返す際に問題が発生しています。以下は、JSON を作成するための私の PHP です。

$environment[] = array('id' => $env, 'adjacencies' => $hostnames);

foreach($hostnames as $hostname) {
        $environment[] = array('id' => $hostname, 'name' => $hostname, 'data' => array());
    }

return json_encode($environment);;

json_encode 環境をテキスト ファイルに出力すると、次のように返されます。

[{"id":"Dev","adjacencies":["tb23","tbwag","tbvg","tbut"]},{"id":"tb23","name":"tb23","data":[]},{"id":"tbwag","name":"tbwag","data":[]},{"id":"tbvg","name":"tbvg","data":[]},{"id":"tbut","name":"tbut","data":[]}]

これは適切に出力されているようですが、Javascript に戻すと未定義/null として返されます。以下は、ajax 呼び出しを含む JavaScript です。

var ajax = new AJAX();
var args = "id=" + $("#apps").val() + "&env=" + node.id + "&nocache=" + (new Date()).valueOf();
ajax.connect("POST", "http://" + window.location.hostname + "/project/graph/host", args, function(json) {

var output = '';
for (property in json) {
    output += property + ': ' + json[property]+'; ';
}
alert(output);
});

私は明らかに、それを印刷するためにさまざまなことを試みましたが、運がありませんでした. PHP で json_last_error を試したところ、'0' として返されました。これは、JSON 構造に問題がないことを意味します。

最後に、Javascript で次のコマンドを使用して、グラフの作成を続けたいと思います。

var hostNodes = eval('(' + json + ')'); 

なぜこれを元に戻せないのかについて、どんな助けも大歓迎です!

4

2 に答える 2

1

PHPコードを1つのポストパラメーターを受け取る一意のファイルに保持し、設定されている場合はjson配列を構築し、下部で実行できます

echo json_encode($json);
flush();

私は純粋な JavaScript の専門家ではなく、あなたのアプローチに慣れていませんが、jQuery の使用を検討する必要があります。少なくとも、json 配列を受け取る方法を 1 つ提案して、簡単に操作できるようにします (データが json であることも確認します):

$.ajax(
{
    // Post select to url.
    type : 'post',
    url : 'myPHPAjaxHandler.php',
    dataType : 'json',
    data : 
    {
        'select' : true
    },
    success : function(data)
    {
        // PHP has returned a json array.

        var id, hostname;

        for(var i = 0; i < data.length; i++)
        {
            id = data[i].id;
            hostname = hostname[i].id;
            // Construct a string or an object using the data.

        }
    },
    complete : function(data)
    {
        // Optional.
    }
});

私が言うように、あなたがそれを手に入れるかどうかを決めるのはあなたのためです. 複雑なプロジェクトに便利です。

于 2013-03-13T13:53:08.450 に答える
1

コールバック関数に渡されるデータは、すでに JS オブジェクトに解析された JSON であると想定しているようですが、そうであるという兆候は見られません。JSON.parse を使用して JS オブジェクトに解析する必要がある生の JSON データである可能性が最も高いです (eval() ではありません - eval() は非常に危険です。真の JSON データを扱う場合は常に JSON.parse を優先する必要があります。一般に「純粋な」JSON ではないため、XSS スタイルの攻撃。)

于 2013-03-13T13:55:40.927 に答える