$(window).load在初始ajax完成之前启动

时间:2014-01-22 13:53:31

标签: javascript jquery html ajax

我遇到一个奇怪的问题,我无法在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();
});

谢谢, 汤姆

4 个答案:

答案 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被加载延迟。