Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么d3.text请求失败?_Javascript_Http_Text_D3.js_Get - Fatal编程技术网

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