Javascript 为什么d3.text请求失败?
这件事我已经坚持了好几个小时了。请帮我找出错误 为什么这Javascript 为什么d3.text请求失败?,javascript,http,text,d3.js,get,Javascript,Http,Text,D3.js,Get,这件事我已经坚持了好几个小时了。请帮我找出错误 为什么这d3.text请求失败?() 当这起作用的时候?() 我一直在反复阅读这篇文章,尝试使用不同的输入格式(text/plain,text/html,等等…),但我无法让第一个片段正常工作 有什么问题吗?正如您所发现的,如果文件请求返回错误,数据对象(diff)将为空。如果始终使用回调函数的两个参数版本,并对函数的第一行进行错误检查,则可以更快地解决此问题: d3.text("http://q39.qhor.net/cach/diff.php?
d3.text
请求失败?()
当这起作用的时候?()
我一直在反复阅读这篇文章,尝试使用不同的输入格式(text/plain
,text/html
,等等…),但我无法让第一个片段正常工作
有什么问题吗?正如您所发现的,如果文件请求返回错误,数据对象(
diff
)将为空。如果始终使用回调函数的两个参数版本,并对函数的第一行进行错误检查,则可以更快地解决此问题:
d3.text("http://q39.qhor.net/cach/diff.php?action=diff", function(error, diff) {
if (error) {
document.write("Error reading file");
return;
}
document.write(diff); // returns 'null'
});
d3传入的“error”对象除了检查其存在性之外没有多大用处——使用的是XMLHTTPRequest函数,而不是返回的错误。浏览器应将错误本身记录到控制台中
为什么即使可以直接打开文件,文件请求仍会返回错误?因为Javascript在使用外部文件时非常有礼貌:只有当服务器包含一个标题,表明您的网页可能使用这些文件时,它才会使用这些文件
具体来说,当您尝试运行该请求时,控制台上应该显示的错误消息如下
无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”
换句话说,您不能在脚本中使用其他人的文件,除非它明确告诉您的浏览器您有权使用它。第二个示例中使用的代理服务器是为您获取文件,然后将其传递到浏览器,并指示http://syari.net
domain。但是,如果我尝试使用JS fiddle中的文件名,我仍然会得到一个错误:
无法加载XMLHttpRequest。“访问控制允许源站”仅包含白名单“”。源“”不在列表中,因此不允许访问
有关访问控制和HTTP请求的更多信息:
在D3的较新版本中,回调的第二个参数是数据,即
函数(error,diff)
。这对你有用吗?没有,但是第一个链接的请求似乎花费的时间太长,这就是为什么diff
为null
的原因。不知道如何在不损失性能的情况下修复它…第一个对我来说相当快(几乎是瞬间)。
d3.text("http://freya.syari.net/pool/ltcProxy.php?action=diff", function(diff) {
document.write(diff); // returns a number read from input
});
d3.text("http://q39.qhor.net/cach/diff.php?action=diff", function(error, diff) {
if (error) {
document.write("Error reading file");
return;
}
document.write(diff); // returns 'null'
});