gpt4 book ai didi

coldfusion - 如何使用 jQuery 通过 ajax 将数组变量发送到 ColdFusion CFC 远程方法?

转载 作者:行者123 更新时间:2023-12-03 22:21:37 25 4
gpt4 key购买 nike

我有一个像这样的 ColdFusion CFC 函数:

<cffunction access="remote" name="getResults"
returntype="struct"
returnformat="JSON"
output="no">

<cfargument name="q" required="true" type="array" />

...
</cffunction>

如何从 jQuery 调用此函数? jQuery 的数组编码形式都不会让 ColdFusion 将值视为数组。

如果传递“q=a&q=b”(如 jQuery.ajaxSettings.traditional = true),该函数将获取字符串“a,b”,而不是数组。虽然用逗号分割似乎是一种可能性,但如果其中一个“q”值包含逗号,则它将不起作用。另外,理想情况下,服务器端的函数不必知道如何通过网络序列化数据的问题,并且应该继续接受数组。

如果您传递“q[]=a&q[]=b”(jQuery 默认值),它不会映射到“q”参数。如果尝试将“q”参数的名称更改为“q[]”,CFC 将因参数名称无效而出错。

最佳答案

首先要知道的是jQuery Ajax requests do not encode arrays so have you to use something else to encode the data (这是下面引用的 jquery.JSON.js 的来源)。因此,通过在那里找到的 JSON 编码,我通过使用 cfajaxproxy 找出了正确的语法。并研究它在 Firebug 中生成的 URL:

http://localhost/remote.cfc?method=getResults&argumentCollection=%7B%22q%22%3A%5B1%2C2%5D%7D

是的,“argumentcollection”方法是正确的,并且引用数组的变量“q”就在那里。

我使用以下代码作为测试台:

remote.cfc

<cfcomponent output="false">
<cffunction access="remote" name="getResults"
returntype="struct"
returnformat="JSON"
output="no">

<cfargument name="q" required="true" type="array" />

<cfreturn {a=1,b=2}>
</cffunction>
</cfcomponent>

remote.cfm 查看 cfajaxproxy 如何生成其 url

<cfajaxproxy cfc="Remote" jsclassname="Remote">
<cfoutput>
<script language="javascript" type="text/javascript">
var oRemote = new Remote();
alert(oRemote.getResults([1,2]));
</script>
</cfoutput>

remote.html 使用 jQuery 实现

<script language="javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
<script language="javascript" src="jquery.JSON.js"></script>
<script language="javascript" type="text/javascript">
var argumentCollection = { q: [1,2] };
$.ajax({
url: 'remote.cfc',
data: {
method: 'getResults',
argumentCollection: $.JSON.encode(argumentCollection)
},
success: function(response) {
alert(response);
},
dataType: 'json'
});

</script>

关于coldfusion - 如何使用 jQuery 通过 ajax 将数组变量发送到 ColdFusion CFC 远程方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3999283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com