WEB开发网
开发学院软件开发Java 使用 Rico JavaScript 库、ColdFusion MX 7 和 Wi... 阅读

使用 Rico JavaScript 库、ColdFusion MX 7 和 Windows Indexing Service 构建一个启用 Ajax 的搜索页面

 2010-03-09 00:00:00 来源:WEB开发网   
核心提示: 第一次加载此页面时 (onLoad event),请求处理程序使用 Ajax 引擎进行注册,使用 Rico JavaScript 库、ColdFusion MX 7 和 Windows Indexing Service 构建一个启用 Ajax 的搜索页面(6),此处理程序将服务器端页面(此页面处

第一次加载此页面时 (onLoad event),请求处理程序使用 Ajax 引擎进行注册。此处理程序将服务器端页面(此页面处理此请求)的 URL 与在客户端用作其标识符的一个名称相关联。此外,因为此页面提供了一个由 Ajax 引擎使用搜索结果进行更新的 div 区段,所以此页面必须注册为一个元素:

ajaxEngine.registerRequest('getSearchResults','ajax_results.cfm'); 
ajaxEngine.registerAjaxElement('SearchResults'); 

要避免信息超载,显示结果被限制为预定义的条目数;并提供了 JavaScript 函数以进行向前或向后导航。其中每个函数都生成一个 Ajax 请求来调用服务端的页面,并将其传递给 URL 上的两个参数: qu(要查找的字符串)和 pg(要显示结果的页面数)。

在服务器端,此页面(参见 清单 2)检索 URL 参数,查询索引内容,按客户机请求选择结果的正确子集,并将典型的 ajax-response 以 XML 格式打包返回给浏览器。在 ColdFusio 中,我使用 cfcontent 标记来指定要返回给浏览器的内容类型。

清单 2. ajax_results.cfm 服务器页面

<cfcontent type="text/xml"> 
<ajax-response> 
<response type="element" id="SearchResults"> 
 
<h1>Search results</h1> 
 
<cfscript> 
PageSize = 10; 
MaxRecords = 50; 
 
if (IsDefined("URL.qu")) { 
 SearchString = URL.qu; 
} 
else { 
 SearchString = ""; 
} 
 
if (IsDefined("URL.pg") and IsNumeric(URL.pg)) { 
 RequestedPage = Val(URL.pg); 
} 
else { 
 RequestedPage = 1; 
} 
</cfscript> 
<cfif SearchString eq ""> 
 <p>Your search did not match any documents.</p> 
<cfelse> 
 <cfscript> 
 QueryString = SearchString & " AND ##filename *.htm?"; 
 
 ixQuery = CreateObject("COM","ixsso.Query"); 
 ixQuery.Query = QueryString; 
 ixQuery.Columns = "filename,size,rank,characterization,vpath,DocTitle,DocAuthor"; 
 ixQuery.SortBy = "rank[d], DocTitle"; 
 ixQuery.MaxRecords = MaxRecords; 
 
 RS = ixQuery.CreateRecordSet("nonsequential"); 
 
 if (RS.EOF) { 
  WriteOutput("<p>Your search did not match any documents.</p>"); 
 } 
 else { 
  RS.PageSize = PageSize; 
 
  PageCount = RS.PageCount; 
 
  if ((RequestedPage lt 1) or (RequestedPage gt PageCount)) { 
   RequestedPage = 1; 
  } 
 
  RS.AbsolutePage = RequestedPage; 
 
  if (RS.RecordCount gt 0) { 
   FirstRecordOnPage = RS.AbsolutePosition; 
   LastRecordOnPage = FirstRecordOnPage + PageSize - 1; 
   if (LastRecordOnPage gt RS.RecordCount) { 
    LastRecordOnPage = RS.RecordCount; 
   } 
   WriteOutput("<p>"); 
   WriteOutput("Results <strong>" & FirstRecordOnPage & " - " & LastRecordOnPage); 
   WriteOutput("</strong> of <strong>" & RS.RecordCount & "</strong> (page "); 
   WriteOutput(RequestedPage & " of " & PageCount & ")"); 
 
   if (RequestedPage gt 1) { 
    WriteOutput(" <a href='javascript:getPreviousResults()'>Previous results</a>"); 
   } 
   if ((PageCount gt 1) and (RequestedPage neq PageCount)) { 
    WriteOutput(" <a href='javascript:getNextResults()'>Next results</a>"); 
   } 
 
   WriteOutput("</p>"); 
  } 
 
  while (not (RS.EOF or (RS.AbsolutePage neq RequestedPage))) { 
   WriteOutput("<p>"); 
   WriteOutput("<a href='" & RS.Fields.Item("vpath").Value & "' target='_blank'>"); 
   WriteOutput(XmlFormat(RS.Fields.Item("DocTitle").Value) & "</a>"); 
   WriteOutput("<br />"); 
   WriteOutput(XmlFormat(RS.Fields.Item("characterization").Value)); 
   WriteOutput("</p>"); 
   RS.MoveNext(); 
  } 
 } 
 
 RS.Close(); 
 ReleaseComObject(RS); 
 ReleaseComObject(ixQuery); 
 </cfscript> 
</cfif> 
 
</response> 
</ajax-response> 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:使用 Rico JavaScript

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接