Javascript 为什么我的程序同时执行if和else?

Javascript 为什么我的程序同时执行if和else?,javascript,jquery,asp.net-mvc,razor,Javascript,Jquery,Asp.net Mvc,Razor,我的程序以一种非常奇怪的方式响应。当我单击按钮并调用selectService时,它会正确处理,但最终的if/else语句表现得很奇怪,因为它同时显示if和else部分的消息。有时它会显示旧消息,然后显示新消息 var i=0; 功能选择服务{ $tblServices tr.filter':has:checkbox:checked'。每个函数{ //i=1;//检查循环是否已完成 //alerti; var url='@url.ActionCreateInvoice'; 风险值数据={ fk_

我的程序以一种非常奇怪的方式响应。当我单击按钮并调用selectService时,它会正确处理,但最终的if/else语句表现得很奇怪,因为它同时显示if和else部分的消息。有时它会显示旧消息,然后显示新消息

var i=0; 功能选择服务{ $tblServices tr.filter':has:checkbox:checked'。每个函数{ //i=1;//检查循环是否已完成 //alerti; var url='@url.ActionCreateInvoice'; 风险值数据={ fk_BookingID:$Booking_ID.val, fk_ServiceID:$td:eq0,this.text } $.postrl、数据、函数响应{ 如果response.ReturnStatusJSON==true{ alertresponse.ReturnStatusJSON; 返回true; }否则{ swalSorry!,response.ReturnMessageJSON,错误; 返回false; } }; i=1; }; 如果i==0{ swalSorry!中,您必须至少选择一个服务,错误; 回来 } 如果i>0{ var url2='@Url.ActionUpdateBookingInvoiceGeneration'; 变量数据2={ 预订ID:$Booking\u ID.val } $.postrl2,数据2,函数响应{ 如果response.ReturnStatusJSON==true{ swalDone,response.ReturnMessageJSON,成功; $'.selectColumn'.propchecked,false; 回来 }否则{ swalSorry!,response.ReturnMessageJSON,错误; } }; } } 发生什么事了?为什么会这样?我正在使用最新版本的Chrome

更新:


调试时,我看到了一个完全不同的问题。我在表中选择了3个复选框,每个循环应该至少运行3次,但它一开始运行了2次并跳转到ifi>0,完全执行该复选框,然后再次跳转到select services函数,并运行第三个复选框,即剩余的一个。

我想我有点理解您的意图,并使用一个变量来检查内部是否存在块。每个块都已执行,这是错误的做法。使用同步请求也是如此

所以这里有一个建议,希望能有所帮助

功能选择服务{ //首先,管理用户未选择服务的情况 如果$tblServices tr.filter':有:复选框:选中“===null{//或检查数组长度 swalSorry!中,您必须至少选择一个服务,错误; 回来 } //那么,如果他有 $tblServices tr.filter':has:checkbox:checked'。每个函数{ var url='@url.ActionCreateInvoice'; 风险值数据={ fk_BookingID:$Booking_ID.val, fk_ServiceID:$td:eq0,this.text } //做你的第一个请求 $.postrl、数据、函数响应{ 如果response.ReturnStatusJSON==true{ alertresponse.ReturnStatusJSON; var url2='@Url.ActionUpdateBookingInvoiceGeneration'; 变量数据2={ 预订ID:$Booking\u ID.val } //仍然在回调中,如果希望在回调后完成,请执行第二个回调 //得到第一个的结果 $.postrl2,数据2,函数响应{ 如果response.ReturnStatusJSON==true{ swalDone,response.ReturnMessageJSON,成功; $'.selectColumn'.propchecked,false; 回来 }否则{ swalSorry!,response.ReturnMessageJSON,错误; } }; 返回true; }否则{ swalSorry!,response.ReturnMessageJSON,错误; 返回false; } }; };
}不清楚你在描述什么。首先,您的AJAX调用是在循环中进行的。那你为什么不期望它被制作多次呢?至于if/else,我们可以向您保证的一点是,该代码的任何给定实例绝对不会同时执行这两个块。但是,由于您使用可能不同的运行时值多次执行该代码,所以您看到的似乎是预期的行为。那么具体是什么问题呢?它不可能来自同一个HTTP请求,所以我猜可能是来自.each的新请求,也可能是selectService被调用了两次。尝试添加一些日志:PS。如果response.ReturnStatusJSONonly@Stacky:我甚至不知道那句话是什么意思。但有一件事我确信,您需要调试并减少问题。当某些特定的和意外的事情发生时,这就是您调试的地方。确定调试器中到底发生了什么。在哪一行代码中会发生意外情况?投入是什么?你以为会发生什么?为什么?@Stacky:好的,那么在这种情况下有什么问题?如果i>0对任何给定的i值执行什么操作?看起来您希望从第一个post-done处理程序返回来打破每个循环。它们没有,循环是在第一个AJAX调用运行done处理程序之前执行的。这意味着,在第一个if的条件下,i永远不是0。这也意味着,如果
总是通过在if运行时我总是1。然后是奇怪的部分,什么是response.ReturnStatusJSON和response.ReturnMessageJSON,$。这里的post不是jQuery post吗?异步请求也是如此……你是说同步请求也是如此吗?