2010-03-13 42 views
1
服务器

我期待张贴下列类型的数据使用jQuery &服务器ColdFusion的:发布静态和可变长度的数据与jQuery和ColdFusion的

foodID - int 
foodDESC - text html text from a WYSIWYG (CKEDITOR) 
--there will always be just 1 foodID and foodDESC per POST to the server but there can be a variable number of: 
locationID - int 
LocationDesc - text 
--There can be 0-8+ of these. 

我应该在一个邮寄这个或多个帖子? 如果有一篇文章,最聪明的方法是什么?我以前从来不需要处理这么多的数据。

谢谢

+0

对于决定不回答的人来说,问题是否清楚? – AnApprentice 2010-03-13 02:00:43

+1

你如何获得locationID和LocationDesc?它们是分开的(最多8个)输入框?他们叫什么名字? (你是否有你的表单示例代码?) – 2010-03-13 05:24:22

回答

0

您可以在一个POST中发送它们,只要确保输入字段名称是唯一的。

+0

我不认为这是可能的想法,因为它包含未知长度:[{“locationID”:“16”,“locationDesc”:“XXXX”},{“locationID “:”111“,”locationDesc“:”XXXX“},{”locationID“:”12“,”locationDesc“:”XXXX“},{”locationID“:”11“,”locationDesc“:”XXXX“} ] – AnApprentice 2010-03-13 02:47:31

+0

你是在谈论JSON的AJAX文章,还是普通的HTML表单文章?即使它是JSON,所有CF关心的是它正在接收一个JSON字符串,并且你可以将DeSerializeJSON()返回给CF结构体。 – Henry 2010-03-13 03:17:08

+0

是的,JSON的AJAX文章 – AnApprentice 2010-03-13 03:17:46

0

我不得不猜测你的表格是什么样子:

myForm.cfm页面(假定的jQuery的1.4.x和自定义JS脚本加载)

<form id="myForm"> 
<input type="hidden" name="foodID" id="foodID" value="" /> 
<textarea name="foodDESC" id="foodDESC"></textarea> 

<input type="text" name="locationID1" value="" class="locID" /> 
<input type="text" name="locationDesc1" value="" class="locDesc" /> 

<input type="text" name="locationID2" value="" class="locID" /> 
<input type="text" name="locationDesc2" value="" class="locDesc" /> 

..more locationIDs and LocationDesc inputs as needed.. 
<input type="button" name="save" id="save" value="Save" /> 
</form> 

myScript.js

// I highly recommend validating javascript with www.jslint.com and testing with firebug 
$("#save").click(function() { 
    var serviceUrl, foodID, foodDESC, locIDs, locDescriptions; 
    serviceUrl = "myProcessor.cfc?method=save"; 
    locIDs = []; 
    locDescriptions = []; 

    // get the value of the two easy ones: 
    foodID = $("#foodID").val(); 
    foodDESC = $("#foodDESC").val(); 

    // Reference: http://marcgrabanski.com/article/jquery-select-list-values 
    // Get all locationIDs based on the similar class name and save them to an array 

    $('.locID').each(function (i, item) { 
     locIDs[i] = $(item).val(); 
    }); 

    // likewise for the location descriptions 
    $('.locDesc').each(function (i, item) { 
     locDescriptions[i] = $(item).val(); 
    }); 

    // send form data to server side form processor 
    $.post(serviceUrl, { 
     foodID: foodID, 
     foodDESC: foodDESC, 
     locationIDs: locIDs, 
     locationDescs: locDescriptions 
    }, function (result) { 

      // display result message 
      alert(result); 
     }, "json"); 

}); 

myProcessor.cfc

<cfcomponent output="no"> 
<cfsetting showdebugoutput="no"> 
<cfset ds="myDatasource"> 

    <cffunction name="save" access="remote" returnFormat="JSON" output="no" hint="Saves data to the server db"> 
      <cfargument name="foodID" type="string" required="yes"> 
      <cfargument name="foodDESC" type="string" required="yes"> 
      <cfargument name="locationIDs" type="string" required="yes"> 
      <cfargument name="locationDescs" type="string" required="yes"> 
      <cfset var result = "Success!"> 

      <cftry> 

      <!--- Process arguments here for your server side needs such as a cfquery 
      foodID will be a simple string or integer 
      foodDESC will be a string varchar or text 
      locationIDs and locationDescs will be a javascript array. Can't remember if Coldfusion will process it as a comma delimited list or an array. Either way, it's simple to handle with CF. If it's an array, you will need to modify the argument type above ---> 

      <cfcatch> 
       <!--- Uh oh, something happened, return the message for debugging ---> 
       <cfset result = cfcatch.message & " " & cfcatch.detail> 
      </cfcatch> 
      </cftry> 
      <cfreturn result> 
    </cffunction> 
</cfcomponent>