jQuery没有发布 - (jQuery - ColdFusion)

时间:2013-12-05 19:08:39

标签: javascript jquery coldfusion coldfusion-9

我有一个小函数,可以使用ColdFusion 9和jQuery

从我的数据库中删除记录

该函数存在于其他3个位置,并且它是相同的并且正常运行,但它似乎与此页面有错误。

Html表单代码

<form name="devRatingCat" method="post" action="" >
    <table  class="table table-bordered table-striped" >
        <tr>
            <th>&nbsp;</th>
            <th>ID</th>
            <th>Category Name</th>
        </tr>
        <cfloop query="categories">
            <tr>
                <td><input class="checkbox" type="checkbox" name="mark" value="#recID#"></td>
                <td>#recID#</td>
                <td>#categoryname#</td>
            </tr>
        </cfloop>
    </table>
    <hr />
    <div class="pull-left">
        <button class="btn btn-danger" type="button" onClick="dlteCatR(mark);" >Delete</button>      
</form>

的jQuery

function dlteCatR(field)
{               
    var $srt = $(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){
        for(i=0; i<$srt.length; i++){   
            if($srt[i].checked == true){
                var url="surveyAdmin.cfc?wsdl&method=deleteRateCat&recId="+$srt[i].value;
                $.post(url);
            }
        }
        window.location.reload();
    }else{
        return false;
    }
}

surveyAdmin.cfc方法

<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 = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.recID#">
    </cfquery>
</cffunction>

我正在使用firebug来跟踪电话,但它没有给我任何关于它为什么不起作用的好解释。

此外,当我在firebug中复制链接并在浏览器中自行运行时,事务正在发生,因为它应该

1 个答案:

答案 0 :(得分:5)

$.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();
        });        
    }
}