在未实现接口 XMLHttpRequest 的对象上调用错误“open”
Error 'open' called on an object that does not implement interface XMLHttpRequest
当我尝试从另一个类函数在类内启动ajax请求时,我收到此错误。您可以从此示例中在 Firefox 控制台中获取错误:
https://jsfiddle.net/d2o1d0eu/
http://codepen.io/anon/pen/dGwwKG
var MyClass = new Class({
initialize: function(options){
this.my_request = new Request({
url: '/echo/html/',
method: 'post',
onSuccess: function(resp) {
alert(resp);
}
});
},
request: function(param){
this.my_request.send('html='+param);
}
});
var MySecondClass = new Class({
Implements: [Options],
options: {
first_class: {}
},
initialize: function(options){
this.setOptions(options);
this.options.first_class.request('internal'); // error
},
request: function(param){
this.options.first_class.request(param);
}
});
var unknown_name = new MyClass();
// unknown_name.request('unknown_name test'); // ok
var test = new MySecondClass({
'first_class': unknown_name
});
// test.request('second class test'); // error
任何建议不胜感激,谢谢。
在内部,Options
mixin 使用 Object.merge
,它执行传递的 options
参数的递归副本。
在代码中,将MyClass
实例作为选项传递给 MySecondClass
的实例。以这种方式传递对象时,Object.merge
将以递归方式克隆该对象。这意味着在第二个类中,this.options.first_class.my_request
实际上是Request
实例的克隆,并且还克隆了该实例的所有对象属性。
这会带来一个问题,因为Request
类的实际XMLHttpRequest
对象是在此过程中克隆的。你最终得到的是一个基本对象(即,它只继承自Object.prototype
(,它具有实际XMLHttpRequest
实例的所有属性和方法,但不是实际实例。由于XMLHttpRequest
的方法认为您正在尝试在非实例上调用这些方法,因此您将获得一个 DOMException。
要点是:不要将Class
实例作为选项传递。相反,将它们作为单独的参数传递:new MySecondClass(unknown_name, options)
.
相关文章:
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- Javascript播放声音会导致“NPObject上的错误调用方法”
- 未捕获的类型错误:调用函数时无法读取未定义的属性“then”
- 电话差距构建地理位置 NPObject 上的错误调用方法
- 间歇性 HTTP 403 禁止访问错误调用相同的 Ajax 代码
- 致命错误:调用未定义的函数 FusionCharts()
- 致命错误:未捕获错误:调用未定义的函数loginRelocate() Javascript
- Codeigntier/AJAX - 致命错误:调用未定义的函数 form_input() in
- 范围错误:调用堆栈超出异步 .eachSeries 上的范围错误
- 未捕获的类型错误:调用 push() 时的类型错误
- 错误:调用 waitForCondition 时错误响应状态:13
- JavaScript 错误:“调用的对象已与其客户端断开连接”在 IE8 中的 window.open 上
- AngularJS函数在路由更改时被错误调用
- Javascript中的作用域错误.调用该对象的不同方法中的方法
- Ajax返回错误调用错误Ajax错误调用
- “function"Javascript中没有定义错误:调用函数的正确方式是什么?
- YouTube iFrame API:没有就绪调用,没有错误调用
- 从 javascript 错误调用的引导进度条
- 小部件,从选项错误调用函数
- JavaScript -当错误调用其他函数时,函数不会抛出错误