【问题标题】:Empty responseText after GET Http Request with Javascript使用 Javascript 获取 Http 请求后为空 responseText
【发布时间】:2014-04-01 11:56:46
【问题描述】:

我尝试从 Http 获取请求中获取文本:

这是一个用于纠正文本的小型网络服务。

http://193.196.7.26/cgi-bin/ColorError-line.pl?arg_childText=Ich%20gehe%20in%20die%20schule.&arg_errors=MOR_GrS;MOR_KS&arg_corrText=Ich%20gehe%20in%20die%20Schule.

当我使用浏览器(例如 Chrome)调用服务时,我会看到更正后的文本。

现在我用 Javascript 试试这个:

var http2 = new XMLHttpRequest();
var url1 = "http://193.196.7.26/cgi-bin/ColorError-line.pl?arg_childText=Ich%20gehe%20in%20die%20schule.&arg_errors=MOR_GrS;MOR_KS&arg_corrText=Ich%20gehe%20in%20die%20Schule."
http2.open("GET", url, false);
http2.setRequestHeader("Content-type", "text/plain");
http2.send(null);
var temp = http2.responseText;

但是 responseText 是空的。有什么想法吗?

【问题讨论】:

  • 你的意思是http2.open("GET", url1, false);
  • 那是你的域名吗?没有 Access-Control-Allow-Origin 所以跨域请求会失败。
  • @Pietu:哦,我是个白痴……但现在我收到一条错误消息:XMLHttpRequest cannot load 193.196.7.26/cgi-bin/….. No 'Access-Control-Allow-Origin' header is present on the请求的资源。因此,不允许访问 Origin 'localhost'。
  • 您需要在您的域上调用从该网址下载并返回结果的服务器端脚本。
  • 可以,或者做一个脚本来做; stackoverflow.com/questions/5549068/…

标签: javascript html web-services http get


【解决方案1】:

您必须设置Access-Control-Allow-Origin 标头。

.htaccess:

<Files "ColorError-line.pl">
    Header set Access-Control-Allow-Origin *
</Files>

打印此标题:

Access-Control-Allow-Origin: *

这将允许从任何域进行跨域访问,而不仅仅是您的域。要仅允许您的域,您应该将其设置为

Access-Control-Allow-Origin: http://yourdomain.com

最后没有斜线,但是如果您的域发生更改,您必须记住更改它。这也适用于.htaccess 版本。

更新:另外,您可以按照here 的建议创建一个代理脚本来执行此操作。但是,我建议您过滤发送到代理的 URL,否则有人可能会通过下载大文件给您的网站带来大量额外流量。

【讨论】:

  • 您应该向不熟悉 CORS 的人指出,这将允许任何人进行跨域访问
  • 但是为什么我可以使用任何浏览器调用服务,但使用 Javascript 却不那么容易?这对我来说毫无意义。
  • @SimonHilner 因为页面(这里是你自己的页面)的权限比用户少;页面可能不会加载他们想要的任何页面(这里是服务),但用户(当然:D)可以。
  • 也许你们中的某个人知道更好的方法来获得我想要的东西。下次我没有机会打电话给服务器的主人了。
  • @SimonHilner 答案中还有另一种方法。
猜你喜欢
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 2018-10-29
  • 2017-08-18
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 2016-09-14
相关资源
最近更新 更多