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