如何控制Javascript的执行

时间:2014-08-19 12:19:08

标签: javascript php

我想从MySQL表中获取最后一个id,并在Javascript和PHP中创建一个具有此值的cookie。以下是我的代码。

if (getCookie("id")=='') {
    last_visitor_id = get_last_visitor();
    deviceID = last_visitor_id++;
    setCookie("id", deviceID , 365);
    $.ajax({
        url:"save_device.php?deviceID="+deviceID+
            "&websiteID="+WebsiteID+
            "&width="+sWidth+
            "&height="+sHeight,
            success:function (datasource) {
                // alert (datasource);
            }
        }
    );  
} else {
    deviceID = getCookie("id");
    alert ("working...." + deviceID);
}


 function get_last_visitor(){
    $.ajax({url:"get_last_visitor.php",success:function(last_visitor){
         // last_visitor++;
         //alert ("Last Visitor ID " + last_visitor);
         return (last_visitor);
    }});        

}

代码存在问题。在获取最后一个访问者ID之前,它会执行setCookie函数,即使get_last_visitor()函数没有返回任何值。函数在一段时间后返回值,但同时它会创建一个带有NAN的cookie。

任何人都可以建议一些解决方案吗?

1 个答案:

答案 0 :(得分:2)

从ajax调用执行return (last_visitor)是没有意义的,因为它是异步的。执行流程没有等待ajax调用完成,下一行是执行的,所以get_last_visitor总是返回null。

您可以像这样更改代码以使用成功ajax回调来执行逻辑

if (getCookie("id")==''){
    $.ajax({url:"get_last_visitor.php"})
    .done(function(last_visitor_id) {
        deviceID = last_visitor_id++;
        setCookie("id", deviceID , 365);
        $.ajax({url:"save_device.php?deviceID="+deviceID+"&websiteID="+WebsiteID+"&width="+sWidth+"&height="+sHeight,success:function(datasource){
            // alert (datasource);
        }});    
    });
} else {
    deviceID = getCookie("id");
    alert ("working...." + deviceID);
}