如何通过AJAX向CFC传递参数?

5
我将使用以下脚本来调用CFC函数:

我正在使用下面的脚本调用CFC函数:

function loadQuery() {
    $.get('QueryData.cfc',{},function(GetMyData){
    $("#content").html(GetMyData)
        })
    return false
    }

$(document).ready(function() {
    $("#loadLink").click(loadQuery)
});

This is my HTML:

<a href="" id="loadLink">Load It</a>

<div id="content"></div>

我正在调用以下CFC:

<cffunction name="GetMyData" access="public" returntype="query">

    <cfargument name="RecordID" type="string" required="yes">

    <cfset var RecordData = "">

    <cfquery name="RecordData" datasource="MyDSN">
        SELECT
            foo.RecordID,
            foo.RecordName            
FROM
            foo
        WHERE
            foo.RecordID =  #ARGUMENTS.RecordID# ;        
    </cfquery>

    <cfreturn RecordData>

问题一是当我调用CFC时,CFC页面会显示出来;在请求管理员密码后,CFC描述会出现。我不想加载QueryData.cfc;我想执行QueryData.cfc内的函数。

第二个问题是我无法找到传递参数给CFC方法的语法。

2个回答

6

您可以使用$.get方法做类似的事情,但我通常会这样做:

$(document).ready(function() {
    $("#loadLink").click(function(e) {
        e.preventDefault();
        var recordata = $(this).attr("href").substring(1); //trim '?' char
        $.ajax({
            type: "GET",
            url: "QueryData.cfc?method=GetMyData",
            data: recordata,
            dataType: "html",
            success: function(message) {
                $("#content").html(message);
            }
        });
    });
});

记录ID的数据存储在DOM中的某个位置,如下所示:

<a href="?RecordID=#url.RecordID#" id="loadLink">Load Data</a>
<div id="content"></div>

同时,不确定它在access="public"的情况下会如何表现,它可能仍然可以工作,但是您的函数应该将access属性设置为"remote"。


@Henry:但是 access="remote" 会的。;-) - Tomalak
我不明白的是如何使recordID变得动态。例如,我不能这样做:"data: "RecordID=" + #URL.RecordID#" -- 有什么正确的方法吗? - Mohamad
1
$.ajax中的"data"字段可以是一个结构体/关联数组。 - Henry
1
在我看来,最好将动态的recordID数据存储在DOM中的某个位置,而不是生成动态JavaScript。这样可以将JavaScript保留在单独的文件中以进行缓存。我已经更新了我的脚本,展示了一种方法。 - Soldarnal
此外,Henry提出了一个很好的观点,有时候创建一个数据参数的结构体比创建一个字符串更容易(例如,如果你正在从表单构建POST数据)。 - Soldarnal
@Mel,如果CF ajax标签可以完成您需要的工作,请使用它们。选择适合特定任务的正确工具。 - Henry

1

针对你的需求,你想尝试一下<cfdiv>或者<cfajaxproxy>吗?这样会更容易。

但是回答你的问题,GET url应该是XXX.cfc?method=whatever&param=xyz

编辑:顺便提一下,你的函数应该有access="remote",除非你在使用<cfgrid>,否则不建议返回查询对象。


谢谢Henry,我从来没有想过<cfdiv>和<cfajaxproxy>。你有使用示例的链接吗? - Mohamad
http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec10e40-7ffe.html - Henry
1
如果您已经在页面上加载了jQuery,我更喜欢仅使用它,以避免由cfdiv引入的第二个ajax库的开销。 - Soldarnal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接