XMLHttpRequest() send NS_ERROR_FAILURE for localhost with absolute OR relative path
XMLHttpRequest() send NS_ERROR_FAILURE for localhost with absolute OR relative path
我在 Firefox 31 ESR 中收到以下错误:
Error: NS_ERROR_FAILURE:
Source file:
这是来自 Internet Explorer 11 的相同内容:
SCRIPT5022: InvalidStateError
这是我的脚本,它调用 到 AJAX 函数:
ajax('post','standard/','part='+p+'&price='+q,'sequel_sub_object_key');
这是我的 AJAX 函数:
function ajax(method,url,param_id_container_pos,id_container,id_focus,sequel)
{
var methods = Array('get','head','post');
if (window.XMLHttpRequest && in_array(method,methods))
{
xhr = new XMLHttpRequest();
xhr.open(method,url,true);//Error triggers here for localhost.
if (method=='post')
{
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xhr.send(param_id_container_pos);
}
xhr.send(null);
xhr.onreadystatechange = function()
{console.log('xhr.readyState = '+xhr.readyState);
if (xhr.readyState=='4')
{
alert('xhr.responseText = '+xhr.responseText);
}
}
}
显然 Firefox 和 IE 非常模糊 认为我正在执行跨站点脚本...在 localhost?
对于 URL 我已经尝试传递绝对和相对路径:
document.getElementsByTagName('base')[0].href+'standard/'
window.location.href
'standard'
我查了几十页,其中大部分都在 Stack 上,问题都没有了。
我对跨站点脚本的意图为零。
我不改变method
。
我没有使用不同的协议(都是 HTTP,不是 HTTPS)。
我没有使用 任何 子域。
我从不依赖或削弱我的框架代码。
我不关心URL必须是绝对的还是相对的,我只是需要它工作。
这是一个 Intranet 网站。
服务器和客户端都是同一台电脑。
原始 URL 格式为:http://localhost/Client/standard/?http-query
目标URL是http://localhost/Client/standard/
。
Apache 访问日志显示请求通过并且 returns HTTP 200。
open
后紧接着的alert()
None 的 onreadystatechange
状态记录在控制台中。
调用ajax
函数时,并非所有参数都需要设置。
我错过了什么?
您正在为同一个 XHR 对象调用 send()
两次,这可能是错误的来源,因为这会触发 InvalidStateError
,因为对象不再打开,它已经在发送.
function ajax(method, url, param_id_container_pos, id_container, id_focus, sequel) {
....
if (method == 'post') {
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send(param_id_container_pos); // you're sending here
}
xhr.send(null); // and then again here, which triggers an error
..........
此外,您通常应该 url 对要发送的数据进行编码
var data = 'part=' + encodeURIComponent(p) +'&price=' + encodeURIComponent(q);
ajax('post', 'standard/', data, 'sequel_sub_object_key');
一起
var data = 'part=' + encodeURIComponent(p) +'&price=' + encodeURIComponent(q);
ajax('post', 'standard/', data, 'sequel_sub_object_key');
function ajax(method, url, param_id_container_pos, id_container, id_focus, sequel) {
var methods = ['get', 'head', 'post'];
if (window.XMLHttpRequest && methods.indexOf(method) != -1) {
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
if (method == 'post') {
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send(param_id_container_pos);
} else {
xhr.send(null);
}
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
alert('xhr.responseText = ' + xhr.responseText);
}
}
}
}
我在 Firefox 31 ESR 中收到以下错误:
Error: NS_ERROR_FAILURE:
Source file:
这是来自 Internet Explorer 11 的相同内容:
SCRIPT5022: InvalidStateError
这是我的脚本,它调用 到 AJAX 函数:
ajax('post','standard/','part='+p+'&price='+q,'sequel_sub_object_key');
这是我的 AJAX 函数:
function ajax(method,url,param_id_container_pos,id_container,id_focus,sequel)
{
var methods = Array('get','head','post');
if (window.XMLHttpRequest && in_array(method,methods))
{
xhr = new XMLHttpRequest();
xhr.open(method,url,true);//Error triggers here for localhost.
if (method=='post')
{
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xhr.send(param_id_container_pos);
}
xhr.send(null);
xhr.onreadystatechange = function()
{console.log('xhr.readyState = '+xhr.readyState);
if (xhr.readyState=='4')
{
alert('xhr.responseText = '+xhr.responseText);
}
}
}
显然 Firefox 和 IE 非常模糊 认为我正在执行跨站点脚本...在 localhost?
对于 URL 我已经尝试传递绝对和相对路径:
document.getElementsByTagName('base')[0].href+'standard/'
window.location.href
'standard'
我查了几十页,其中大部分都在 Stack 上,问题都没有了。
我对跨站点脚本的意图为零。
我不改变
method
。我没有使用不同的协议(都是 HTTP,不是 HTTPS)。
我没有使用 任何 子域。
我从不依赖或削弱我的框架代码。
我不关心URL必须是绝对的还是相对的,我只是需要它工作。
这是一个 Intranet 网站。
服务器和客户端都是同一台电脑。
原始 URL 格式为:
http://localhost/Client/standard/?http-query
目标URL是
http://localhost/Client/standard/
。Apache 访问日志显示请求通过并且 returns HTTP 200。
open
后紧接着的None 的
onreadystatechange
状态记录在控制台中。调用
ajax
函数时,并非所有参数都需要设置。
alert()
我错过了什么?
您正在为同一个 XHR 对象调用 send()
两次,这可能是错误的来源,因为这会触发 InvalidStateError
,因为对象不再打开,它已经在发送.
function ajax(method, url, param_id_container_pos, id_container, id_focus, sequel) {
....
if (method == 'post') {
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send(param_id_container_pos); // you're sending here
}
xhr.send(null); // and then again here, which triggers an error
..........
此外,您通常应该 url 对要发送的数据进行编码
var data = 'part=' + encodeURIComponent(p) +'&price=' + encodeURIComponent(q);
ajax('post', 'standard/', data, 'sequel_sub_object_key');
一起
var data = 'part=' + encodeURIComponent(p) +'&price=' + encodeURIComponent(q);
ajax('post', 'standard/', data, 'sequel_sub_object_key');
function ajax(method, url, param_id_container_pos, id_container, id_focus, sequel) {
var methods = ['get', 'head', 'post'];
if (window.XMLHttpRequest && methods.indexOf(method) != -1) {
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
if (method == 'post') {
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send(param_id_container_pos);
} else {
xhr.send(null);
}
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
alert('xhr.responseText = ' + xhr.responseText);
}
}
}
}