首先考虑一下:StackoverFlow link。
这里,Ajax用于向服务器打开Xhttp通道,并使用post方法将一些数据发送到php脚本文件。我在CGI-bin中有一个perl脚本文件,但这也应该有用。
我想通过Javascript将数据发送到Perl脚本,并在没有页面刷新的情况下接收它,所以我这样做了:
使用Javascript:
var basepath = "localhost";
var req = new XMLHttpRequest();
req.open("POST", basepath+"/perlweb/lox.pl", false);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.send("script="+this.script);
req.onreadystatechange = function(){
// execute this when ready state changes, i.e. server responds
if (req.readyState == 4 && req.Status == 200) {
// we got what we wanted
console.log(req.responseText);
}
}
lox.pl
是我的脚本名称。它位于localhost下的/ perlweb中。
我在名称test.pl:
的同一个地方创建了这个文件#! /path/to/perl
print "Content-type: text/plain\n\n";
print "it now works\n";
使用/localhost/perlweb/test.pl
调用此方法会产生预期的输出。所以我觉得perl也准备好了。
现在,回到javascript我有两件事:
我有这个警告:
Synchrone XMLHttpRequests am Haupt-Thread sollte nicht mehr verwendet werden, weil es nachteilige Effekte für das Erlebnis der Endbenutzer hat. Für weitere Hilfe siehe http://xhr.spec.whatwg.org/
转换为:不应再使用主线程中的同步XMLHttpRequest,因为它可以为最终用户的最终结果提供可持续的效果(?? sic)。
我想摆脱这个,但我不知道,从哪里开始。查找链接xhr.spec.whatwg.org令我感到困惑。这似乎是一份完整的规范文件。
有人可以简单地指出我应该做什么吗?
我有这个错误:
NS_ERROR_DOM_BAD_URI: Access to restricted URI denied
虽然该文件存在于我自己的机器中(因为该文件存在于我自己的机器中,我假设我不会遇到CORS问题)。
然后导致问题的原因是什么?
答案 0 :(得分:4)
要异步发送,请更改
req.open("POST", basepath+"/perlweb/lox.pl", false); // false - sync
到
req.open("POST", basepath+"/perlweb/lox.pl", true); // true - async
async - 一个可选的布尔参数,默认为true,指示是否异步执行操作。如果此值为false,则send()方法在收到响应之前不会返回。 (Ref)
注意:从Gecko 30.0(Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27)开始,由于对用户体验的负面影响,主线程上的同步请求已被弃用。
这就是为什么你收到警告“不应再使用主线程中的同步XMLHttpRequest”。
NS_ERROR_DOM_BAD_URI:访问受限制的URI被拒绝
我建议改变
var basepath = "localhost";
到
var basepath = "http://localhost"; or
var basepath = "/localhost";
因为,如果我没有弄错,你想在你的机器上打开一个URL或一个本地路径,但“localhost”本身可能都不是。
如果您仍然遇到此错误,请参阅"NS_ERROR_DOM_BAD_URI: Access to restricted URI denied"