構文:エラーjson.parse、Protovisのデータをロードしようとしているとき
-
11-10-2019 - |
質問
こんにちは私はプロトビスとの仕事の方法を学んでいますが、これまでのところとても良いですが、今では解決できないように見える問題につまずいた。
以下はコードです。 (私は私のヘッダーに最新の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
JSONを検証しました http://www.jsonlint.com/ すでに。したがって、問題は他の場所でなければなりません。
ここで何が起こっているのか誰もが知っていますか?
編集
ProtoViewerアプリで同じデータを読み込んでみました。 http://www.rioleo.org/protoviewer/ そしてそれは機能します。したがって、それはコードでなければなりません。
解決
同期アプローチの代わりに、通常の非同期コールバックを試しましたか?好き:
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'
parameter、$ .ajax()は、JSONとして自動的に偏り、利用可能な場合はjson.parse()を使用します。
他のヒント
セミコロンを追加します ;
あなたの応答の終わりまで
どのブラウザを使用していますか?一部のブラウザは定義しません JSON
物体。以下のURLからスクリプトをダウンロードできます。 JSON
オブジェクトがまだ存在していない場合。
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);
$.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);
}
});