为什么jQuery在这段代码中没有从我的ColdFusion CFC获得返回的json信息?

时间:2010-08-05 16:35:35

标签: jquery ajax coldfusion cfc

我有一个循环浏览文件夹的CFC并删除所述文件夹中的所有文件,在上传和保存图像后进行“清理”功能。在同一个CFC中,我有一个更新数据库中文本的函数。 Bot函数通过jQuery帖子触发。 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>

2 个答案:

答案 0 :(得分:1)

代码完全正常,除了location.reload();的位置一旦我将reload命令移动到我的代码部分,当它从CFC回来时触发,它工作正常。 Nick Craver在这篇文章中提到了这个问题:jQuery window reload doesn't allow to work post

值得一提的是Tony和Ken的评论也有助于诊断问题。运行帖子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。我没有运行两种方法清理掉两个文件夹,而是将其归结为一个清理文件夹的“清理”方法。

答案 1 :(得分: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)。这有帮助吗?