$.post()
发送异步请求.如果在请求完成之前重新加载页面,则请求将中止.
在您的情况下,您在for循环中一次发送n个请求,然后window.location.reload();
在任何有时间完成之前立即重新加载页面(使用此行).要解决此问题,您可以将它们全部合并到一个$.post
请求中并使用成功回调,或者您可以存储从$.post()
数组中返回的每个promise对象并将其传递给$.when
.
我建议使用第一个将所有请求合并为一个请求并使用成功回调的解决方案,但是这需要您修改当前的cfc方法以接受多个记录一次删除,或者创建一个新的cfc方法可以处理它.
一种方法是让您的方法能够处理id的列表而不是单个id.
<cffunction name="deleteRateCat" access="remote" returntype="void" output="no" hint="Delete Rating Categories.">
<cfargument name="recID" type="string" required="true" hint="The id of the rating category to delete.">
<cfquery datasource="#dsn#">
delete from rating_categories
where id in (<cfqueryparam cfsqltype="cf_sql_integer" value="#ListAppend(arguments.recID, 0)#" list="yes">)
</cfquery>
</cffunction>
和js一起去:
function dlteCatR(field){
var r = confirm("Are you sure you want to delete this Category? \n You will not be able to revert this change!")
if(r==true){
var recIdList = $("[name=" + field + "]:checked").map(function(){
return this.value;
}).get().join(",");
var url="surveyAdmin.cfc?wsdl&method=deleteRateCat&recId="+recIdList;
$.post(url).done(function(){
window.location.reload();
});
}
}