2012-12-30 55 views
5

我是jquery的新手,我試圖使用一個對話框調用和更新我的數據庫。我修改了一個現有的模板以生成下面的代碼,並且無法獲取由jquery函數調用的函數savefee。在我的JavaScript控制檯中沒有錯誤。任何幫助表示讚賞。jquery不能用於調用coldfusion cfc

`

<cfset getfees = new artservice().getfees()> 

<html> 
<head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script> 

<script> 
$(document).ready(function() { 

    $(".artdiv").click(function() { 
     var initialDiv = this; 

     //based on which we click, get the current values 
     var feeid = $(this).data("fee_id"); 
     var feetitle = $("h2", this).text(); 

     // set form values 
     $("#fee_id").val(feeid);   
     $("#fee_title").val(feetitle); 

     $("#editForm").dialog({ 
      buttons: { 
       "Save": function() { 
        var thisDialog = $(this); 
         $.post("artservice.cfc", { 
         method: 'savefee', 
         fee_id: $("#fee_id").val(), 
         fee_title: $("#fee_title").val() 
         }, 
        function() { 
         //update the initial div 
         $("h2", initialDiv).text($("#fee_title").val()); 
         $(thisDialog).dialog("close"); 
        }); 
       } 
      } 
     }); 
    }); 

}); 
</script> 
<style> 
.artdiv { 
    padding: 5px; 
    margin: 5px; 
    background-color: #80ff80; 
} 
#editForm { 
    display:none; 
} 
</style> 
</head> 

<body> 

<cfoutput query="getfees"> 

    <div class="artdiv" data-fee_id="#fee_id#"> 
     <h2>#fee_title#</h2> 
    </div> 

</cfoutput> 

<div id="editForm" title="Edit Art"> 
    <input type="hidden" id="fee_id"> 
    <p> 
    <b>Name:</b><br/> 
    <input type="text" id="fee_title"> 
    </p> 

</div> 

</body> 
</html> 

`

在CFC低於

`

<cffunction name="getfees" access="public"> 
    <cfquery datasource="dsn" name="getfees" maxrows="10">select fee_id, fee_title from table</cfquery> 
    <cfreturn getfees> 
</cffunction> 

<cffunction name="savefee" access="public"> 
<cfargument name="fee_id" required="yes"> 
<cfargument name="fee_title" required="yes"> 
<cfquery datasource="dsn">update table set fee_title = '#arguments.fee_title#' where fee_id = #fee_id#</cfquery> 
</cffunction> 

`

誤差爲具有這種功能在的Application.cfc 「傳遞給onCFCRequest功能,args參數是字符串類型不是」

public void function onCFCRequest(required string cfcname, required string method, required string args) { 

    return; 
} 
+1

檢查瀏覽器控制檯中的AJAX請求...是否正在製作?狀態200?正確的數據發送?...似乎沒有任何cfoutput ...應該有?控制檯將幫助縮小服務器與客戶端問題 – charlietfl

+0

是AJAX請求正在制定中。狀態是200.我的響應錯誤「傳遞給onCFCRequest函數的ARGS參數不是字符串類型」,它在我的application.cfc文件中(與此分開)。代碼如下。我註釋掉了這個函數,它現在工作正常。爲什麼發生這種想法。 '\t public void function onCFCRequest(required string string cfcname,required string method,required string args){ \t \t \t return; \t} ' – eduski

+0

建議更新錯誤的問題...我個人更多的前端,coldfusion,尤其是CFC,不是我的強項。可以寫一個意思是''標籤雖然!....有時候爲阿賈克斯有時 – charlietfl

回答

4

由於'onCFCRequest'的函數定義不正確而導致的錯誤。這個函數的第三個參數是一個結構類型,但是你已經將該類型設置爲字符串。所以正確的定義應該是這樣的。

public void function onCFCRequest(required string cfcname, required string method, required struct args) { 

    return; 
} 

另外,如果你在的Application.cfc聲明此功能一兩件事,那麼你需要手動處理的「onCFCRequest」裏面的函數調用。像你這樣的事情需要再次回想起在CFCRequest中的請求函數。

+0

兩個後續問題 - 1)是否需要聲明這個函數? 2)你的最後兩句話讓我失望了 - 你能提供一個例子嗎? – eduski

+0

@eduski - 調用'onCFCRequest' *而不是*請求的cfc方法。由於你的'onCFCRequest'函數是空的,它會攔截cfc的請求,然後做..什麼也不做。如果你想自動調用所需的cfc,你必須在'onCFCRequest'中添加代碼。請參閱文檔底部的完整示例(http://help.adobe.com/zh_CN/ColdFusion/9.0/CFMLRef/WSe821657cd7d6f83f6daaa733122cf6931bb-8000.html)。 (不幸的是,代碼不是動態的,但確實證明了這個概念)。 – Leigh

+1

@ eduski - 回答你的問題。 1)如果您實現'onCFCRequest',那麼您將如何使用它,這取決於您如何使用它,然後您可以更好地控制CFC的Ajax,Web Service和Flash Remoting請求。它可以用作CFC頂部的額外安全層。如果你不想使用這個功能,那麼你可以做到這一點沒什麼大不了的。 2)我認爲Leigh已經回答了這個問題。感謝Leigh。 –

5

你的函數必須設置爲access="remote",因爲他們正在通過直接瀏覽器到CFC調用。

+0

實際上只有第二個。使用ColdFusion代碼調用getFees函數,這是顯示的第一行。 –

+0

實際上也應該將cfcomponent作爲容器。否則,這是一個函數列表。 – user1261365

+0

並參數化您的查詢,而不是將數據直接從URL傳遞到您的數據庫!這是一場災難。哦:在你的函數中VAR變量。 –