3

編集:解決しました。以下のソリューションのいずれかを使用しますが、document.onloadをwindow.onloadに変更する必要があります。とにかくwindow.onload関数を必要とせずに動作します。

これが私が使用しているtest.phpファイルです

<?php 
  include("conn.php");
?>

<!DOCTYPE html>
<html>
<head>
  <title>test</title>
</head>
<body>

    <script src="js/jquery.js"></script>
    <script type="text/javascript">
        document.onload = function (){
          var jsonString = '<?php echo json_encode($rowarr); ?>';
          var jsonObj = jQuery.parseJSON( jsonString );
          console.log(jsonObj);
          alert( jsonObj.Auckland );
    };

  </script>
</body>
</html>

ChromeデベロッパーツールでjsonStringの値が次のようになることを確認しました

'{"Auckland":37616,"Wellington":35357,"Christchurch":29818}'

その後、コンソールやアラートボックスにログが表示されません。また、jQuery.parseJSONの代わりにJSON.parseメソッドを試しましたが役に立ちませんでした。

私はこのJSONをグーグルチャートジオチャートに使用されるデータテーブル形式にしようとしています。これはこのコードのビットのように見えます

var data = google.visualization.arrayToDataTable([
    ['City',   'Population', 'Area'],
    ['Rome',      2761477,    1285.31],
    ['Milan',     1324110,    181.76],
    ['Naples',    959574,     117.27],
    ['Turin',     907563,     130.17],
    ['Palermo',   655875,     158.9],
    ['Genoa',     607906,     243.60],
    ['Bologna',   380181,     140.7],
    ['Florence',  371282,     102.41],
    ['Fiumicino', 67370,      213.44],
    ['Anzio',     52192,      43.43],
    ['Ciampino',  38262,      11]
  ]);
4

3 に答える 3

4

文字列として配置しない場合、オブジェクトになり、解析する必要はありません。

var jsonObj = <?php echo json_encode($rowarr); ?>;

それ以外の

var jsonString = '<?php echo json_encode($rowarr); ?>';
var jsonObj = jQuery.parseJSON( jsonString );

document.onloadが起動しない/既に起動されているように見えますか?window.onloadまたはの$(document).ready()代わりに使用する必要があります。

于 2012-07-25T23:09:02.467 に答える
2

実際には、実際のhtmlページのタグ内にphpエコーを使用してJSONを挿入しているためscript、技術的にはオブジェクトリテラルになります。JavaScriptで追加の解析手順を実行する必要はありません。したがって、あなたの場合、割り当てる値jsonStringは実際にはすでにオブジェクトです。

JSONを解析する必要があるのは、それが実際に文字列の形式である場合のみです。したがって、ブラウザに送信される実際のスクリプト部分は次のようになります。

      var cities = {"Auckland":37616,"Wellington":35357,"Christchurch":29818};
      console.log(cities);
      alert( cities.Auckland );

ほとんどの場合、コードはJavaScriptエラーをスローし、オブジェクトを解析しようとすると実行を停止するため、アラートボックスは表示されません。

于 2012-07-25T23:08:58.073 に答える
1

ハンドラー関数が起動されることはないと思います。loadドキュメントオブジェクトにイベントはありません(window.onloadとdocument.onloadを参照)。とにかくそれを待つ必要はありません。DOMと相互作用するハンドラーには何もないので、<body>タグの下部で実行します(コードが下部にある場合は「onload」が必要ですか?を参照してください)。 )。


JSONはJavaScriptのサブセットであるため、オブジェクトリテラルとしてスクリプトに直接出力できます。

var jsonObj = <?php echo json_encode($rowarr); ?>;
console.log(jsonObj);
alert( jsonObj.Auckland );

解析する必要はありません。特に、JSONにエスケープされていないアポストローが含まれていると、文字列リテラルが壊れてしまいます。

于 2012-07-25T23:11:46.203 に答える