Javascript XMLHttpRequest抛出InvalidStateError,表示“无效”;“必须打开对象状态”;
代码-Javascript XMLHttpRequest抛出InvalidStateError,表示“无效”;“必须打开对象状态”;,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,代码- "use strict"; var AJAX = function (params) { this.server ={}; this.url = params.url; this.method = params.method; this.dataType = params.dataType; this.formData = params.formData; this.init = function(){ if(typeo
"use strict";
var AJAX = function (params) {
this.server ={};
this.url = params.url;
this.method = params.method;
this.dataType = params.dataType;
this.formData = params.formData;
this.init = function(){
if(typeof XMLHttpRequest != 'undefined'){
this.server = new XMLHttpRequest();
this.server.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
this.server.setRequestHeader('Content-length', this.formData.length);
this.server.setRequestHeader('Connection', 'close');
console.log("XMLHttpRequest created.");
return true;
}
};
this.send = function(){
if(this.init()){
this.server.open(this.method, this.url, true);
this.server.send(this.formData);
}
};
};
var data = new FormData();
data.append('user', 'sachin');
var params = {
url : 'example.com',
method : 'post',
dataType: 'json',
formData : data
};
var backgroundWindow = chrome.extension.getBackgroundPage();
var ajax = new backgroundWindow.AJAX(params);
ajax.send();
出现以下错误:
Error in event handler for contextMenus: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.
它的使用方法-
"use strict";
var AJAX = function (params) {
this.server ={};
this.url = params.url;
this.method = params.method;
this.dataType = params.dataType;
this.formData = params.formData;
this.init = function(){
if(typeof XMLHttpRequest != 'undefined'){
this.server = new XMLHttpRequest();
this.server.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
this.server.setRequestHeader('Content-length', this.formData.length);
this.server.setRequestHeader('Connection', 'close');
console.log("XMLHttpRequest created.");
return true;
}
};
this.send = function(){
if(this.init()){
this.server.open(this.method, this.url, true);
this.server.send(this.formData);
}
};
};
var data = new FormData();
data.append('user', 'sachin');
var params = {
url : 'example.com',
method : 'post',
dataType: 'json',
formData : data
};
var backgroundWindow = chrome.extension.getBackgroundPage();
var ajax = new backgroundWindow.AJAX(params);
ajax.send();
我似乎无法找出背后的原因。您可能需要在
XMLHttpRequest
调用之后和setRequestHeader
调用之前打开连接,而不是:
this.server = new XMLHttpRequest();
this.server.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
我认为你需要做:
this.server = new XMLHttpRequest();
this.server.open(this.method, this.url, true);
this.server.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
还要确保在
init()
中删除这一行,就像上面所做的那样。错误是直接的:
contextMenus的事件处理程序中出错:InvalidStateError:未能对“XMLHttpRequest”执行“setRequestHeader”:必须打开对象的状态
在设置请求头之前,需要调用.open(..)
考虑到您的代码,我认为最好的方法是将调用移动到
init(..)
函数中的open
var AJAX = function (params) {
this.server ={};
this.url = params.url;
this.method = params.method;
this.dataType = params.dataType;
this.formData = params.formData;
this.init = function(){
if(typeof XMLHttpRequest != 'undefined'){
this.server = new XMLHttpRequest();
//Open first, before setting the request headers.
this.server.open(this.method, this.url, true);
//Now set the request headers.
this.server.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
//this.server.setRequestHeader('Content-length', this.formData.length);
//this.server.setRequestHeader('Connection', 'close');
console.log("XMLHttpRequest created.");
return true;
}
};
this.send = function(){
if(this.init()){
this.server.send(this.formData);
}
};
};
赞成。很明显愚蠢的我没有正确地阅读错误。谢谢。还有一件事要补充,我必须删除
内容长度
和连接
标题。浏览器会处理这个问题。但是在哪里可以使用它们呢?正确,浏览器会处理这两个标题。您不应该指定它们。如果我没弄错你的问题,它们就不能用在任何地方。