Javascript 语法:尝试为protovis加载数据时出错JSON.parse
嗨,我正在学习如何使用protovis,到目前为止还不错,但现在我偶然发现了一个我似乎无法解决的问题 下面是代码。(我的标题中加载了最新的jquery) 我已经在上验证了JSON。因此,问题肯定出在别处 有人知道这是怎么回事吗 编辑Javascript 语法:尝试为protovis加载数据时出错JSON.parse,javascript,ajax,json,protovis,Javascript,Ajax,Json,Protovis,嗨,我正在学习如何使用protovis,到目前为止还不错,但现在我偶然发现了一个我似乎无法解决的问题 下面是代码。(我的标题中加载了最新的jquery) 我已经在上验证了JSON。因此,问题肯定出在别处 有人知道这是怎么回事吗 编辑 我试着在protoviewer应用程序中加载相同的数据:它可以工作。所以一定是代码。您使用的是哪种浏览器?有些浏览器不定义JSON对象。您可以从下面的URL下载脚本,该脚本将定义JSON对象(如果该对象尚不存在) 您可以检查JSON是否定义如下: alert(JS
我试着在protoviewer应用程序中加载相同的数据:它可以工作。所以一定是代码。您使用的是哪种浏览器?有些浏览器不定义
JSON
对象。您可以从下面的URL下载脚本,该脚本将定义JSON
对象(如果该对象尚不存在)
您可以检查JSON
是否定义如下:
alert(JSON);
更新
好的,接下来我要做的是检查ajax调用是否实际返回corect数据。更改代码以打印从ajax调用返回的JSON
var JSONdata = $.ajax({ type: "GET", url: dataURL, async: false }).responseText;
alert(JSONdata);
var earthquakes = JSON.parse(JSONdata);
添加分号
代码>到您的响应结束您是否尝试了常规异步回调而不是同步方法?比如:
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()步骤。如果添加数据类型:“json”
参数,$.ajax()将自动反序列化为json,并在可用的地方使用json.parse()。谢谢!我使用的是Firefox(最新版本),我还登录了Safari。警报(JSON)给了我这个:[object JSON]好的,再次感谢。第一个警报(JSONdata)给了我一个空警报,然后是错误。第二个只有错误。在哪里?对不起,我没看到。我一直在这个代码字符串现在。谢谢!!这不再给我错误了。虽然好像什么都没装。我不知道JSON是否位于同一台服务器上。当我说是同一台服务器时,我应该说是同一个域。是否通过以开头的URL访问包含此JavaScript的页面http://eagereyes.org
?这会让您陷入困境。对于跨站点请求,不能使用使用XMLHttpRequest的常规AJAX方法;出于安全原因,浏览器将禁止这些请求。如果您可以控制远程站点,请考虑将该数据作为JSONP提供。如果没有,您将需要构建一个服务器端端点,该端点将输入来自$.ajax()代码的请求,并充当请求远程数据并将其返回的代理。好的。谢谢。这对我来说是对的。所以基本上我需要做的就是从同一个域加载JSON。子域也可以工作吗?实际上,file_get_contents()(在php中)可能是一个解决方案!
$.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);
}
});
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();
}
});
$.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);
}
});