JavaScript に問題があるため、onload 関数の後にアラートを含めるとコードが機能する理由と、アラートを削除するとコードが機能しない理由がわかりません。
var jsonObjects = [];
var imagesObj = {};
var kinImages = [];
var stage;
var layer = new Kinetic.Layer();
window.onload = function () {
var jsonloaded;
$.getJSON('net.json', function (response) {
jsonloaded = response;
$.each(jsonloaded, function (key, val) {
jsonObjects.push(val);
});
setupJsonImages();
});
}
function setupJsonImages() {
stage = new Kinetic.Stage({
container: 'container',
width: 1000,
height: 800
});
for (var i = 0; i < jsonObjects.length; i++) {
var objName = jsonObjects[i].name;
imagesObj[objName] = new Image();
kinImages[i] = new Kinetic.Image({
image: imagesObj[objName],
x: jsonObjects[i].x,
y: jsonObjects[i].y,
name: jsonObjects[i].name,
width: 0,
height: 0,
draggable: true
});
imagesObj[objName].src = jsonObjects[i].img;
imagesObj[objName].onload = function () {
layer.add(kinImages[i]);
layer.draw();
}
// if this alert is removed, the code breaks
alert("imagesobj src");
kinImages[i].on('dragend', function () {
$.ajax({
type: "POST",
url: 'receiver.php',
contentType: 'application/json; charset=utf-8',
async: false,
data: JSON.stringify({
objectname: (this).getName(),
xcoord: (this).getPosition().x,
ycoord: (this).getPosition().y
})
});
});
}
stage.add(layer);
stage.draw();
}
Ajax と非同期コードについて読んだことがありますが、アラートによって遅延が発生することを知っていますが、Ajax コードは Dragend の後にのみ呼び出されるため、意味がありませんか?