2010-08-25 43 views
0

我有一個非常標準的聯繫表單,現在使用cfc進行處理。我想爲啓用了javascript的用戶使用.post。我用表單元素的jQuery創建了一個數組,我想將它傳遞給相同的CFC(不修改CFC),但我不確定如何去做。基本上,我想將一個名爲「formData」的東西作爲參數傳遞給CFC(就像我只處理基本的服務器端代碼一樣),然後在CFC中解析它。現在我只是在cfc中使用cfdump(在非java提交時可以正常工作),但它不適用於此設置。有任何想法嗎?如何使用可以在ColdFusion函數中使用的jQuery創建適當的表單元素數組?

這裏是我的jQuery

$('#theForm').submit(function(e) { 
    e.preventDefault(); 

    var formData = {}; 
    $('form [name]').each(function(){ 
     formData[this.name] = this.value; 
    }); 
    $.post("cfc/engine.cfc?method=collectdata&returnformat=json", 
      {'formData': formData} 
      ); 
}); 

我的CFC

<cffunction name="collectdata" access="remote" output="false" returntype="void"> 
    <cfargument name="formData" type="struct" required="yes"> 
    <cfdump var="#formData#"> 
    <cfabort> 
</cffunction> 
+0

你沒有得到什麼結果?它拋出一個錯誤?或者只是沒有做你期望的事情? – 2010-08-25 19:40:47

+0

「FORMDATA是必需的但未傳入」是我得到的錯誤... – Ofeargall 2010-08-25 19:49:09

+0

刪除CFARGUMENT標記並轉儲參數範圍。它會顯示你正在發佈的內容。 2010-08-26 00:18:19

回答

1

這是那個時代的另外一個時,我希望我在fingertimes 24/7有一臺服務器...

仔細看看你的CFC,它看起來像你需要formData是一個結構。但是,IIRC,JSON被認爲是一個字符串,您必須手動將其反序列化。

嘗試將類型更改爲字符串,或將其完全刪除。

編輯:看起來像jquery.post()發送標準的http post,而不是AJAX/webservice調用。因此,如果我正確理解所有分散的文檔,內容將被放入表單範圍。

+0

我刪除了type =」「,仍然沒有去。錯誤是聲稱參數「FORMDATA」沒有被傳遞給函數。我無法傳遞formData變量(數組)作爲一個整體單元,然後解析它在cfc中? – Ofeargall 2010-08-25 20:02:38

+0

謝謝。我最終手動反序列化它,因爲ti是一個簡短形式。花了一段時間,但我認爲它會給我更強的安全感,因爲我正在驗證CFC的每一個論點。 – Ofeargall 2010-08-31 23:11:16

0

通過將您的JavaScript數組序列化爲JSON來準備您的JavaScript數組。 Crockford的json2js是一種簡單而嚴格的方法。所以,你必須:

<script src="json2.js"></script> 

...然後:

var your_params = [ 'this','that','theother' ]; // your js array 
var s_params = JSON.stringify(your_params); // now as json 

...然後在您的.post()

{'formData': s_params} 

設置你的CFC接收的參數鍵入string(或any)。在CFC中,對傳入的參數中使用deserializeJson()

<cffunction name="collectdata" output="false" access="remote" returntype="void"> 
    <cfargument name="formData" type="string" required="yes"> 
    <cfset var result = deserializejson(arguments.formData)><!--- make a CF array ---> 
    <cfset var foo = isArray(result)> <!--- TRUE! ---> 
    <!--- ... etc ... ---> 
</cffunction> 

所以,你已經採取了JavaScript數組,它序列化到JSON,它發送到您的CFC並獲得它作爲一個字符串,然後反序列化到「原生「CF陣列。同樣的事情將分別用於在javascript和CF之間傳輸js對象/結構(與本例中的簡單數組相反)。

相關問題