2011-01-14 46 views
2

您好我正在学习如何使用protovis,到目前为止这么好,但现在我偶然发现了一个我似乎无法解决的问题。语法:Error JSON.parse,试图加载原始数据

以下是代码。 (我有最新的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/和它的作品。所以它一定是代码。

回答

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()。

0

您正在使用哪种浏览器?某些浏览器不定义JSON对象。您可以从下面的URL下载一个脚本,该脚本将定义JSON对象,如果该对象不存在。

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

可以检查JSON是否被定义如下:

alert(JSON); 

更新

我做OK接下来的事情就是检查Ajax调用真的返回了corect数据。更改您的代码以打印从ajax调用返回的JSON。

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

谢谢!我使用的是Firefox(Latest),我也在Safari中检查过。警报(JSON)给了我:[对象JSON] – bottleboot 2011-01-14 21:29:44

+0

好的,再次感谢。第一个警报(JSON数据)给了我一个空警报,然后是错误。第二个只有错误。 – bottleboot 2011-01-14 21:46:43

0

添加一个分号;您回应

+0

哪里?我很抱歉,我没有看到它。现在我已经在这段代码中使用了一段时间了。 – bottleboot 2011-01-14 21:36:49

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); 
        } 
     });