2017-03-14 14 views
1

このボタンをクリックすると、レコードをデータベースに挿入してからファイルをダウンロードするボタンを作成しようとしています。私はAjax経由でこれをやろうとしていますが、ファイルのダウンロードは動作しますが、レコードをdbに挿入していません。ColdFusionでAjaxを使用したdbレコードの挿入とファイルのダウンロード

トリガー

<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開発ツールを開き、[ネットワーク]タブをクリックします。次に、ボタンをクリックし、components.cfcへの呼び出しを見てください。これによりエラーが出力されます。また、クエリに少なくとも2つの構文エラーがあります。1)を閉じないでください。 2)クエリの最後に「)」という行末がありません。 –

答えて

1

上記のように、URLスコープではなくPOSTを実行しているので、 "FORM"スコープを調べてみてください。

<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

関連する問題