2

こんにちは私はプロトビスの使い方を学んでいますが、これまでのところうまくいっていますが、今は解決できないような問題に遭遇しました。

以下はコードです。(ヘッダーに最新のjqueryがロードされています

<script type="text/javascript+protovis"> 
var dataURL = "http://eagereyes.org/media/2010/protovis-primer/earthquakes.json";

var JSONdata = $.ajax({ type: "GET", url: dataURL, async: false }).responseText;
var earthquakes = JSON.parse(JSONdata);

var width = 560;
var height = 245;

var barWidth = width/earthquakes.length;
var gap = 2;

new pv.Panel().width(width).height(height+5)
    .add(pv.Bar)
        .data(earthquakes)
        .bottom(0)
        .width(barWidth-gap)
        .height(function(d) d.Magnitude * (height/9))
        .left(function() this.index * barWidth)
    .root.render();

Firefoxでこれを試してみると、次のアラートが表示されます。

Syntax:Error JSON.parse

私はすでにhttp://www.jsonlint.com/でJSONを検証しました。したがって、問題は他の場所にあるはずです。

誰もがここで何が起こっているのか知っていますか?

編集

同じデータをprotoviewerアプリ(http://www.rioleo.org/protoviewer/ )にロードしてみましたが、 機能します。したがって、それはコードでなければなりません。

4

4 に答える 4

2

同期アプローチの代わりに通常の非同期コールバックを試しましたか?好き:

var dataURL = "http://eagereyes.org/media/2010/protovis-primer/earthquakes.json";

$.ajax({
  type: "GET",
  url: dataURL,
  success: function(response) {
    var earthquakes = JSON.parse(JSONdata);

    var width = 560;
    var height = 245;

    var barWidth = width/earthquakes.length;
    var gap = 2;

    new pv.Panel().width(width).height(height+5)
        .add(pv.Bar)
            .data(earthquakes)
            .bottom(0)
            .width(barWidth-gap)
            .height(function(d) d.Magnitude * (height/9))
            .left(function() this.index * barWidth)
        .root.render();     
  }
});

また、そのJSONファイルは、リクエストを行っているページがアドレスバーに(正確に)表示されているのと同じサーバー上にありますhttp://eagereyes.orgか?

最後に、手動のJSON.parse()ステップは必要ありません。パラメーターを追加するとdataType: 'json'、$。ajax()は自動的にJSONとして逆シリアル化され、使用可能な場合はJSON.parse()を使用します。

于 2011-01-14T21:45:03.887 に答える
0

どのブラウザを使用していますか?JSON一部のブラウザはオブジェクトを定義しません。JSONオブジェクトがまだ存在しない場合は、以下のURLからスクリプトをダウンロードしてオブジェクトを定義できます。

https://github.com/douglascrockford/JSON-js

JSONが次のように定義されているかどうかを確認できます。

alert(JSON);

アップデート

次に行うことは、ajax呼び出しが実際にcorectデータを返していることを確認することです。コードを変更して、ajax呼び出しから返されたJSONを出力します。

var JSONdata = $.ajax({ type: "GET", url: dataURL, async: false }).responseText;
alert(JSONdata);
var earthquakes = JSON.parse(JSONdata);
于 2011-01-14T21:26:46.040 に答える
0

;応答の最後にセミコロンを追加します

于 2011-01-14T21:29:30.063 に答える
0
$.ajax({
            type: "POST",
            url: "saveChangesInEditing.php",
            data: idObject,
            success: function(data){
                         dataObject = JSON.parse(data);
                         $("input[name = 'id']").val(dataObject.id);
                         $("input[name='full_name']").val(dataObject.full_name);
                         $("input[name='sport']").val(dataObject.sport);
                         $("input[name='idol']").val(dataObject.idol);
                    },
            error: function(data){
                     alert("error!" + data);
                   }
        });
于 2012-10-15T01:44:07.640 に答える