加载侦听器上的函数触发得太早
Function on load listener triggered too early
iI正在发送XHR请求,并希望用返回的数据在画布上绘制图像,我还希望传递一个索引参数,以便在特定位置绘制图像。
我的问题是,我的函数在传递参数时启动得太快,所以responseText
是未定义的。
// Outside loop
function drawSVG(i) {
svg = this.responseText;
svgImage = new Image();
svgImage.src = "data:image/svg+xml," + svg;
svgImage.load = artboardContext.drawImage(svgImage, i * sliceWidth, i * sliceHeight);
}
// Inside loop
(function(x) {
var colourReq = new XMLHttpRequest();
var count = x;
colourReq.addEventListener("load", function() {
drawSVG(count);
}, false);
colourReq.open("GET", "/color/" + hex);
colourReq.send();
})(x);
以下工作,但我不能使用索引[I]来定位svg:
// Inside loop
(function(x) {
var colourReq = new XMLHttpRequest();
var count = x;
colourReq.addEventListener("load", drawSVG, false);
colourReq.open("GET", "/color/" + hex);
colourReq.send();
})(x);
我不确定解决这个问题的最佳方法。
responseText
未定义,因为您在错误的位置查找它。
this
的值取决于函数的调用方式:
drawSVG(count);
不会在任何特定对象上调用它,所以您访问的是window.responseText
而不是colourReq.responseText
。
您可以将colourReq
作为另一个参数传递:
drawSVG(count, this);
和
function drawSVG(i, xhr) {
svg = xhr.responseText;
相关文章:
- 加载侦听器上的函数触发得太早
- AngularJS popover未显示内容:渲染太早
- 函数启动太早
- 咽表结束得太早了
- Node js async.series无法使用Express应用程序--响应发生得太早
- $.当承诺解决得太早时
- 过渡开始得太早,而 css 样式尚未完全应用
- 对于 IE 中的 ajax 内容,加载触发时间太早
- Moment.js fromNow() 太早了几秒钟
- Js 数组长度增加得太早
- JavaScript 在命令运行太早时打开新窗口而不是选项卡
- Meteor FlowRouter触发器输入触发太早
- Javascript函数调用得太早
- 太早从数组中删除元素
- Android的onOrientationChange在朝向完成之前触发(太早了)
- 聚合物自定义元素观察者开火太早
- QlikView运行BodyOnLoadFunctionNames回调太早-为什么?
- Angular广播初始化得太早了
- Jquery事件处理程序-新处理程序触发太早
- gulp-watch和liverload,重载太早