将带有jquery的数组传递给ColdFusion组件

时间:2015-10-29 17:30:09

标签: jquery json ajax coldfusion cfc

在开始之前,我对jquery很新,事实上我在3个月前没有javascript背景。

我想要完成的是获取我在jquery中可用的一系列信息,并将该数组传递给可以处理信息的.cfc文件。

这是我的jquery:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript" src="jquery.json.min.js"></script>
<script type="text/javascript">
  $(function() {
    var mydata = {data:[1,2,3,4,5]};
																						
    $.post('test.cfc', {method:"handleArray", returnFormat:"plain", argumentCollection:   $.toJSON(mydata)}, function(res) {
    alert($.trim(res));
    });
  });
</script>

这是一段代码,发自大约5年前Stephen Duncan Jr的帖子。

这是冷聚变:

<cfcomponent>

<cffunction name="handleArray" access="remote" returnType="numeric">
<cfargument name="data" type="array" required="true">

  <cfquery name = "qTest" datasource="#REQUEST.dsn#" username="#REQUEST.dsu#" password="#REQUEST.dsp#"> 
    INSERT INTO test
      (value1, value2, value3, value4, value5)
    VALUES (
      <cfqueryparam cfsqltype="cf_sql_integer" value="#handleArray[1]#">,
      <cfqueryparam cfsqltype="cf_sql_integer" value="#handleArray[2]#">,
      <cfqueryparam cfsqltype="cf_sql_integer" value="#handleArray[3]#">,
      <cfqueryparam cfsqltype="cf_sql_integer" value="#handleArray[4]#">,
      <cfqueryparam cfsqltype="cf_sql_integer" value="#handleArray[5]#">)
    </cfquery>

<cfreturn arrayLen(arguments.data)>
</cffunction>

</cfcomponent>

这段代码当然只是一个让它运行的测试。但我需要将大约40个变量传递给cfc。

任何可以提供的信息都将非常受欢迎,尤其是解释结果有效的任何信息。

1 个答案:

答案 0 :(得分:2)

@TimHowey你的jquery post方法似乎有问题。我想这就是你需要做的事情:

<script type="text/javascript" src="jquery.json.min.js"></script>
<script type="text/javascript">
  $(function() {
      var mydata = "[1,2,3]";
      $.post('test.cfc', {
          method: "handleArray",
          returnFormat: "plain",
          data: mydata
      }, function(res) {
          alert("ok");
      });
  });
</script>

您正在使用post方法,因此每件事都将在form范围内发送。在您的cfc中,您需要做的就是反序列化这样的参数:

    <cffunction name="handleArray" access="remote" returnType="numeric">
        <cfargument name="data" type="any" required="true">
        <cfset var getArray = DeserializeJSON(arguments.data)/>
        <cfset var qTest = "">

        <cfquery name = "qTest" datasource="#REQUEST.dsn#" username="#REQUEST.dsu#" password="#REQUEST.dsp#"> 
            INSERT INTO test
            (value1, value2, value3)
            VALUES (
                <cfqueryparam cfsqltype="cf_sql_integer" value="#getArray[1]#">,
                <cfqueryparam cfsqltype="cf_sql_integer" value="#getArray[2]#">,
                <cfqueryparam cfsqltype="cf_sql_integer" value="#getArray[3]#">
          )
        </cfquery>

        <cfreturn arrayLen(getArray)>
    </cffunction>

修改

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript" src="jquery.json.min.js"></script>
<script type="text/javascript">
  $(function() {
      var mydata = '[1,"keshav",3]';
      $.post('test.cfc', {
          method: "handleArray",
          returnFormat: "plain",
          data: mydata
      }, function(res) {
          alert("ok");
      });
  });
</script>