0

我有一个 CFC 循环浏览一个文件夹并删除该文件夹中的所有文件,这是上传和保存图像后的一种“清理”功能。在同一个 CFC 中,我有一个更新数据库中文本的函数。Bot 函数通过 jQuery post 触发。text 函数会向我的 jQuery 函数返回一些确认信息,没问题。

但是,清理功能不会将数据返回到我的页面。任何人都可以在我的编码中看到一个明显的错误,它会阻止清理功能将数据返回到我的页面并触发确认吗?

我知道 CFC 正在工作,因为文件已从文件夹中删除,但它根本没有返回“有效”响应。

这是jQuery:

function rebinder(deleteImages){
    $('.editingFormField').attr('value', '');
    if ($('.edit').hasClass('selected')){
        $('.edit').removeClass('selected');
    }
    $('#imagePreview').attr('src', '');
    $('#et').dialog('close');
    $('#ei').dialog('close');
    if (deleteImages == 'yes'){
        $.post("cfc/engine.cfc?method=clearImages&returnformat=json", 
                    {},
                    function(ret) {
                        //Handle the result
                        alert(ret + "the Return");
                        if(ret == "true") {

                        } else {
                            alert("There was an error in the processing (files_no_del)");
                        }
                    });
        $.post("cfc/engine.cfc?method=clearThumbs&returnformat=json", 
                    {},
                    function(ret2) {
                        //Handle the result
                        if(ret2 == "true") {

                        } else {
                            alert("There was an error in the processing (thumbs_no_del)");
                        }
                    });
    }
    location.reload();
};

和 CFC:

<cffunction name="clearImages" access="remote" output="false" returntype="boolean">
<cfset var deleteConfirm = "true">
<!--- Read Holding Directory --->
<cfdirectory
    action="list"
    directory="#destdir#"
    recurse="true"
    listinfo="name"
    name="qFile"
    />
  <!--- Loop through file query and delete files --->

<cfloop query="qFile">
<cffile action="delete" file="#destdir#/#qFile.name#">
</cfloop>
<cfreturn deleteConfirm>
</cffunction>
4

2 回答 2

1

该代码功能齐全,除了location.reload();将重新加载命令移动到我的代码部分中,当它从 CFC 收到回复时触发,它工作正常。Nick Craver 在这篇文章中讨论了这个问题:jQuery window reload doesn't allow to work post

值得一提的是,托尼和肯的评论也有助于诊断问题。运行 post URL 确实证实了 AJAX 魔法正在按计划发生。

这是有效的修改后的代码:

function rebinder(deleteImages){
    $('.editingFormField').attr('value', '');
    if ($('.edit').hasClass('selected')){
        $('.edit').removeClass('selected');
    }
    $('#et').dialog('close');
    $('#ei').dialog('close');
    $('#imagePreview').attr('src', '');
    if (deleteImages == 'yes'){
        $.post("cfc/engine.cfc?method=clearImages&returnformat=json", 
                    {},
                    function(ret) {
                        //Handle the result
                        if(ret == "true") {
                            location.reload();

                        } else {
                            alert("There was an error in the processing (files_no_del)");
                        }
                    });
    } else {
        location.reload();
    }
};

我所做的唯一真正的改变是稍微巩固了我的 CFC。我没有运行两种方法来清理两个文件夹,而是将其归结为一种清空两个文件夹的“清理”方法。

于 2010-08-05T19:17:56.803 回答
0

我刚刚偷偷看了你的代码,你可以使用 $.getJSON() 函数来调用 CFC,你可以提到你想要调用的方法,并可以选择将参数传递给方法。

$.getJSON('Some.cfc', {method: 'fetchImapStartMessages', arg1: 'Hello',
    returnformat: 'json' },
  function(returndata) {
    //some code here that renders the data
  }
}); 

并确保在 CFC 方法中设置属性 returnformat = "JSON" access="remote"。当从 CFC 方法返回数据时,请确保使用 serializeJSON(returndata)。这有帮助吗?

于 2010-08-05T17:03:43.313 回答