2014-12-30 58 views
-1

嗨,這是我在stackoverflow上的第一個問題:) 試圖使用JavaScript處理Coldfusion。通過在javascript函數中使用cfquery來搜索數據庫

我試圖從數據庫中提取數據並將其顯示在我的頁面中。 但我意識到js是客戶端語言,而cf是serverside。 我不能只運行CFQUERY的一個函數裏,所以我有兩個文件

一個是我的index.html

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 


<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css"> 
<link rel="stylesheet" type="text/css" href="style.css" media="screen" /> 

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script> 


</head> 
<body class="jumbotron"> 
<div class="container text-center " > 

     <div class="row"> 
      <img class="col-sm-4 col-sm-offset-4" src="emp.jpg"/> 
     </div> 

     <div class="row" style="margin-top:20px" > 
     <div class="col-sm-6 col-sm-offset-3"> 
      <div id="imaginary_container"> 

       <div class="input-group stylish-input-group"> 
        <input type="text" class="form-control" id="searchBar" name="searchBar" placeholder="Search" > 
        <span class="input-group-addon"> 
         <button onclick="search(global,$http)"> 
          <span class="glyphicon glyphicon-search"></span> 
         </button>       

        </span> 

       </div> 

      </div> 

     </div> 

    </div> 

</div> 
<script> 
function search($scope, $http) { 
    var searchQ = document.getElementById('searchBar').value; 

    $http.get('/grid.cfc?method=getContact&returnformat=json'). 
     success(function (response) { 
      $scope.todos = data.DATA; 
    }). 
     error(function (data) { 
      $scope.todos = data; 
     }); 
};  



</script> 

</body> 
</html> 

,一個是我的grid.cfc

<cfcomponent> 

<cffunction name="getContact" access="remote" > 
    <cfargument name="firstName" default=""> 
    <cfargument name="lastName" default=""> 

    <cfquery name="searchQry" datasource="MehrabanDSource"> 
     SELECT 
      * 
     FROM Contacts 
     WHERE FirstName=fname; 

    </cfquery> 

    <cfreturn searchQry> 
</cffunction> 

</cfcomponent> 

你能幫助我理解我的代碼,我真的不知道我是否在正確的軌道上,或者如何將一個變量傳遞給我的grid.cfm,以便知道要查找的名字。在此先感謝:)

+4

您正在大量錯誤。我建議從頭開始。採取寶貝步驟,比如讓你的查詢不使用CF,讓你的查詢使用CF工作,讓它在一個函數內工作,等等。一旦你成功取得了成就,不要改變它。 –

+0

您是否被迫使用ColdFusion?你爲什麼使用它? –

+0

我同意丹的評論。簡單地開始。編寫代碼來完成一件事。測試它。泡沫,沖洗,重複。此外,這個聲明跳到我身上:*我有兩個文件...一個是我的** grid.CFM ***。組件必須存儲在'.cfc'文件中。如果將它們存儲在'.cfm'腳本中,它們將無法按預期工作。 – Leigh

回答

0

謝謝丹,謝謝雷了很多:)我用:

<cfajaxproxy cfc="functions" jsclassname="ajax_proxy" /> 
    <cfajaximport> 
    <script> 
     function send_ajax(searchBar) { 
      var instance = new ajax_proxy(); 
      instance.setCallbackHandler(return_ajax); 
      instance.functionality(searchBar); 
      } 
      function return_ajax(result) { 
        document.getElementById('output').innerHTML = result; 
      } 
    </script> 
+0

很高興你有一些工作。但是,我個人建議堅持原來的做法。 CF有很多很好的功能,但..阿賈克斯的東西不是其中之一;-)它是使用過時的js庫和是臭名昭着的海事組織。讓你的原始例子工作並不需要太多。我懷疑最大的問題是使用.cfm文件而不是.cfc。 (注意,不知道你最終的'cfquery'看起來像什麼,但一定要使用'cfqueryparam'即綁定變量來保護你的數據庫免於sql注入)。 – Leigh