我遇到一个奇怪的问题,我无法在google上找到解决方案。
我的网站window.onload
的初始(第一次开始)canvas.js
(在正文结尾处)在preload.js
(内部)中的ajax请求完成之前开始。但刷新后一切正常......
为什么它在刷新后有效但在初始加载时无效?如何让它在第一次启动时起作用?
html结构:
<html>
<head>
<meta charset="utf-8">
<title>Veto Designer</title>
src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="js/preload.js" type="text/javascript"></script>
</head>
<body>
.
.
.
<script src="js/canvas.js" type="text/javascript"></script>
</body>
</html>
preload.js
//preloading some images
.
.
.
var urlFetch = "scripts/designhandler.php"
console.debug("starting ajax");
$.ajax({
type: "POST",
url: urlFetch,
dataType: 'json',
cache: false,
data: {
sport: chosenSport
},
success: function(resp){
mainData=resp;
console.log(mainData);
}
});
canvas.js:
function doSomething(){
.
// this is what runs before the AJAX from preload.js
.
};
$(window).load(function(){
doSomething();
});
谢谢, 汤姆
答案 0 :(得分:3)
你的ajax调用是异步的(AJAX中的第一个A),所以window.load在该请求完成之前触发。最有可能的是它可以重新加载,因为预先加载的图像会被缓存。
尝试在成功回调中运行doSomething()
,这应该可以解决问题。
答案 1 :(得分:1)
设置
async: false,
你的ajax电话中的属性。
答案 2 :(得分:1)
ajax-requests的默认模式是异步的,这意味着请求是在某个随机点发送的。 Javascript不等待请求完成并继续执行。为防止这种情况,您可以使用设置
async:false,
答案 3 :(得分:0)
可能是您从Google API的网站加载jQuery而不是本地加载jQuery,这导致jQuery被加载延迟。