Javascript 在IE7中,如何在jquery期间使用ajax调用设置全局变量或元素值?

Javascript 在IE7中,如何在jquery期间使用ajax调用设置全局变量或元素值?,javascript,ajax,internet-explorer,jquery,Javascript,Ajax,Internet Explorer,Jquery,在IE7中,当在.submittable click事件中调用此代码时,我必须单击submit按钮两次才能设置orderCount全局变量。或者,如果我在一个隐藏的标签上设置了一个属性值,我会得到同样的体验。要设置元素值,我必须单击按钮两次。好像我需要给浏览器更多的处理时间。有什么建议吗?谢谢你,内特 var orderCount = 0; $(document).ready(function(){ $('.submittable').click(function(){ setO

在IE7中,当在.submittable click事件中调用此代码时,我必须单击submit按钮两次才能设置orderCount全局变量。或者,如果我在一个隐藏的标签上设置了一个属性值,我会得到同样的体验。要设置元素值,我必须单击按钮两次。好像我需要给浏览器更多的处理时间。有什么建议吗?谢谢你,内特

var orderCount = 0;
$(document).ready(function(){
$('.submittable').click(function(){
        setOrderCount()
        if ( orderCount == 0 ){
            if (validateAcknowledment($(this).attr('id'))){
                acknowledgeDay($(this).attr('id'));
            }       
        }
    });
});
function setOrderCount(){

    // move this up to validate and do a setAtr
    var school = $("#school").val();
    var orderDate = $("#orderDate").val();
    $.ajax({
        url: "/fos/inventory/getPreviousWeeklyMenuOrders",
        type: "GET",
        dataType: 'json',
        cache:false,
        data: {school: school,
            startWeekMonth: Date.parse(orderDate).getMonth(),
            startWeekDay: Date.parse(orderDate).getDate(),
            startWeekYear: Date.parse(orderDate).getFullYear()
        },
        success: function(data) {

            orderCount = data.orderCount;
            if(orderCount > 0){
                showErrorMessage("You must Acknowledge prior Weekly Menu Order(s) before acknowledging this week's order", 200, 300);
            }

        }
});

令人惊讶的是,有这么多的问题出现了

默认情况下,AJAX调用是asnycronous的。在异步调用完成之前,您在第4行启动调用,然后在第5行检查orderCount。在第二次单击时,异步调用现在已经完成,代码正在执行您认为第一次单击时应该执行的操作


您需要将orderCount检查逻辑移动到匿名“success”回调函数中,以便仅在调用完成时执行。或者使ajax调用同步(jquery选项)

这些问题中出现的数量之多令人惊讶

默认情况下,AJAX调用是asnycronous的。在异步调用完成之前,您在第4行启动调用,然后在第5行检查orderCount。在第二次单击时,异步调用现在已经完成,代码正在执行您认为第一次单击时应该执行的操作


您需要将orderCount检查逻辑移动到匿名“success”回调函数中,以便仅在调用完成时执行。或者使ajax调用同步(jquery选项)

首先,您需要认识到setOrderCount是一个异步函数。它将启动ajax调用,而ajax调用可能需要一段时间来处理。setOrderCount函数将立即返回,远远早于ajax调用完成,因此也早于orderCount变量设置

然后,在click处理程序中,立即检查orderCount变量,但它尚未设置。您需要做的是将此代码从ajax调用移动到success函数:

   if ( orderCount == 0 ){
        if (validateAcknowledment($(this).attr('id'))){
            acknowledgeDay($(this).attr('id'));
        }       
    }

因为这是orderCount变量实际设置的时间。

首先,您需要认识到setOrderCount是一个异步函数。它将启动ajax调用,而ajax调用可能需要一段时间来处理。setOrderCount函数将立即返回,远远早于ajax调用完成,因此也早于orderCount变量设置

然后,在click处理程序中,立即检查orderCount变量,但它尚未设置。您需要做的是将此代码从ajax调用移动到success函数:

   if ( orderCount == 0 ){
        if (validateAcknowledment($(this).attr('id'))){
            acknowledgeDay($(this).attr('id'));
        }       
    }
因为这是orderCount变量实际设置的时间