Первое, что нужно знать, это jQuery Ajax-запросы не кодируют массивы, поэтому вы должны использовать что-то еще для кодирования данных (это то, откуда jquery.JSON.js происходит из ссылки ниже). Итак, с помощью JSON-кода, найденного там, я затем выяснил правильный синтаксис, работая с cfajaxproxy и изучая URL, который он генерирует в Firebug:
http://localhost/remote.cfc?method=getResults&argumentCollection=%7B%22q%22%3A%5B1%2C2%5D%7D
Да, подход "подборка аргументов" является правильным, и переменная "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>