2017-03-14 29 views
1

我試着去創建一個按鈕,點擊時插入一條記錄到數據庫中,然後下載一個文件,下載文件。我試圖通過Ajax做到這一點,文件下載工作,但它不是在db中插入記錄。ColdFusion的插入數據庫記錄,並使用Ajax

觸發

<button type="button" class="btn btn-primary" onClick="downloadFile1()">Download</button> 

腳本

function downloadFile1(){ 
var file1 = 'https://example.com/files/myfile.zip'; 

    $.ajax({ 
     TYPE: "POST", 
     URL: "components.cfc?method=DownloadFile1", 
     data: {fileId : 3}, 
     success: function() { 
       window.location = file1; 
     } 
    }); 
} 

</script> 

Components.cfc

<cfcomponent output="false"> 
<cffunction name="DownloadFile1" access="remote" returntype="string"> 
<cfcontent type="text/html"> 
    <CFQUERY NAME="i"> 
     INSERT into t_terms 
     (bid, fildid) 
     VALUES 
     (
     <cfqueryparam value="#session.busid#" cfsqltype="CF_SQL_INTEGER">, 
     <cfqueryparam value="#url.fileID#" cfsqltype="CF_SQL_INTEGER">) 
    </CFQUERY> 
</cffunction> 

有人能指出我要去的地方錯了嗎?

+2

當您僅使用ColdFusion運行該函數時會發生什麼? –

+1

有一個關閉)在sql查詢中丟失。 Cfqueryparam也不需要結束標籤。 – haxtbh

+0

在函數的開頭添加。然後在您的瀏覽器上打開Web開發工具並單擊網絡選項卡。然後點擊按鈕,查看對component.cfc的調用。這會爲你輸出錯誤。另外,我發現查詢中至少有2個語法錯誤:1)不要關閉; 2)您在查詢中錯過了關閉「)」。 –

回答

1

像傑克上面說的,因爲你正在做一個POST而不是GET,而不是看在URL範圍,嘗試尋找在「形式」的範圍。

<cfqueryparam value="#form.fileID#" cfsqltype="CF_SQL_INTEGER"> 

或者,您可以查找「fileID」。如果它被傳入,您的查詢將起作用。如果沒有,它會拋出一個錯誤。

<cfqueryparam value="#fileID#" cfsqltype="CF_SQL_INTEGER"> 
+0

(Typo Edit)True,但是..函數不應該引用URL或FORM。函數所需的任何值都應該被定義爲參數。 RE:*或者,你可以尋找「fileID」*技術上,是的..但你不應該。相同的變量名稱可能存在於多個作用域中。所以你應該總是爲範圍變量,以避免意外的結果 - 特別是在函數內。 – Leigh