刷新后Javascript未按顺序运行

刷新后Javascript未按顺序运行,javascript,asp.net-mvc-4,Javascript,Asp.net Mvc 4,我有一个系统,通过检查用户是否登录,抓取匹配的用户药物条目,然后使用它来标记已读/未读的消息。当从一个视图转到另一个视图时,它可以正常工作,但有时当我刷新时,它会首先运行显示代码(dateLastSeen为null),然后运行从数据库获取信息的代码(通过调试进行检查)。以下是代码在视图中的顺序: <script type="text/javascript"> // If user isn't logged in, hide submission/ignore drug vis

我有一个系统,通过检查用户是否登录,抓取匹配的用户药物条目,然后使用它来标记已读/未读的消息。当从一个视图转到另一个视图时,它可以正常工作,但有时当我刷新时,它会首先运行显示代码(dateLastSeen为null),然后运行从数据库获取信息的代码(通过调试进行检查)。以下是代码在视图中的顺序:

<script type="text/javascript">
    // If user isn't logged in, hide submission/ignore drug visits
    // Otherwise, continue to else statement and figure out drug visit stuff
    var userLoggedIn = @Html.Raw(Json.Encode(ViewData["Username"])) + '';
    var dateLastSeen = null;
    if (userLoggedIn == "Guest") {
        $('.expandMessagePost').hide();
    }
    // If they're logged in but no pairing of user/NDC exists, set all messages to unread
    // If they're logged in and have visited the page, compare the date in the DrugVisit entry
    // and compare that to the message dates, and if they're newer, set them to unread
    else {
        $.getJSON("/api/DrugVisit", function (drugVisitsJsonPayload) {
            $(drugVisitsJsonPayload).each(function (i, item) {
                // Page has been visited
                if (item.NDC == '@Model.Item1.NDC' && item.Username == userLoggedIn) {
                    dateLastSeen = item.Date;
                    console.log("Date found!");
                }
            });
        });
    }

    $.getJSON("/api/Message/", function (messagesJsonPayload) {
        $(messagesJsonPayload).each(function (i, item) {
            if (item.NDC == '@Model.Item1.NDC') {
                var badge = "";
                // Check (if user logged in) if unread, update DrugVisit entry
                if (userLoggedIn != "Guest") {
                    if (dateLastSeen != null) {
                        if (item.Date > dateLastSeen) {
                            badge = "[UNREAD] - ";
                            console.log(dateLastSeen + " - " + item.Date);
                        }
                    }
                    else {
                        badge = "[UNREAD] - ";
                        console.log(dateLastSeen + " - " + "NULL WTF");
                    }
                }
                $("#messageListing").append('<li> \
                                            ' + badge + item.User + ' - ' + formatDateForOutput(item.Date) + ' - ' + item.Text + ' \
                                             </li>');
            }
        }
        );
    }
    );
</script>

//如果用户未登录,则隐藏提交/忽略药物访问
//否则,请继续阅读else声明并找出药物访问的内容
var userLoggedIn=@Html.Raw(Json.Encode(ViewData[“Username”])+“”;
var dateLastSeen=null;
if(userLoggedIn==“Guest”){
$('.expandMessagePost').hide();
}
//如果已登录但不存在用户/NDC配对,请将所有消息设置为未读
//如果他们已登录并访问了该页面,请比较DrugVisite条目中的日期
//并将其与消息日期进行比较,如果它们较新,则将其设置为未读
否则{
$.getJSON(“/api/DrugVisit”,函数(drugVisitsJsonPayload){
$(drugVisitsJsonPayload)。每个(功能(i,项){
//页面已被访问
if(item.NDC='@Model.Item1.NDC'&&item.Username==userLoggedIn){
dateLastSeen=item.Date;
log(“找到日期!”);
}
});
});
}
$.getJSON(“/api/Message/”,函数(messagesJsonPayload){
$(messagesJsonPayload)。每个(函数(i,项){
如果(item.NDC='@Model.Item1.NDC'){
var-badge=“”;
//检查(如果用户登录)如果未读,更新DrugVisite条目
if(userLoggedIn!=“Guest”){
如果(dateLastSeen!=null){
如果(item.Date>dateLastSeen){
badge=“[UNREAD]-”;
console.log(dateLastSeen+“-”+item.Date);
}
}
否则{
badge=“[UNREAD]-”;
log(dateLastSeen+“-”+“NULL WTF”);
}
}
$(“#messageListing”).append('
  • \ “+badge+item.User+'-'+formatDateForOutput(item.Date)+'-'+item.Text++”\ (),; } } ); } );

  • 这是某种比赛条件吗?我对MVC和ASP.net还是新手,所以我不知道在这里该做什么。谢谢您的帮助。

    我不太明白您希望事情发生的顺序,但您可能应该使用getJson调用中的
    .complete
    函数-例如,如果您想执行
    $.getJson(“/api/DrugVisit”
    ),然后,一旦您有了相关数据,就执行
    $.getJson(/api/Message/”)
    ,您应该执行以下操作:

    $.getJSON("/api/DrugVisit", function (drugVisitsJsonPayload) {
       //do stuff
    }).complete(function() {
       $.getJSON("/api/Message/", function (messagesJsonPayload) {
         //do more stuff, knowing that the first call is finished
       });
    });
    

    太好了,我不知道这个函数,非常感谢!