【问题标题】:query to cfscript properly in coldfusion?在coldfusion中正确查询cfscript?
【发布时间】:2020-05-22 16:43:20
【问题描述】:

澄清:这里的问题是,“我如何停止使用<cfquery> 来检索数据并将其替换为对 API 的调用?”

我有一个 sql 查询,需要帮助才能将其转换为 cfscript。但是,如您所见,我已尝试对其进行转换。但是,如果我在从 sql 查询转换为 cfscript 的正确路径上,我需要一些验证。如果没有,任何人都可以通过从 sql 查询转换为 cfscript 来帮助我吗?谢谢您的帮助。这是我的代码。

CFSCRIPT:

<cfset jsonDatas = fileRead("c:\Users\Desktop\MyApi.json" )>      
<cfset jsonData = deserializeJSON(jsonDatas) />       
<cfif arrayLen(jsonData)>  
  <cfloop array="#jsonData#" index="prop">       
    <cfoutput>  
      <cfscript>  
        // writedump(jsonData);for (item in jsonData[1])   {  
          if (#prop.payGrade# == 0) {
                 #prop.divisionNbr#;        
         #prop.probationBeginDate#;        
         #prop.legacyStatus#;        
         #prop.payStep#;        
         #prop.creationDate#;           
          } 

【问题讨论】:

  • 我认为您需要更清楚地说明问题。 JSON 文件是否包含您的查询结果?你真正想要完成什么?对问题进行一些修改应该使其更易于理解。
  • 很抱歉。是的,我的 json 文件包含我的查询结果。我只是不想使用查询视图并想从 api url/文件 URL 中检索数据?所以,我开始转换我的 sql 查询在 cfscript 中所做的任何事情。
  • 由于上面的示例不是“可运行的”——而且我们无法访问你的数据库或 json 文件——我相信你可以看到其他人很难知道问题是:-) 那么......当你运行代码时会发生什么?结果与您的预期有何不同?请参阅提示:How to ask a good question.
  • 如果你愿意,我可以发布我的完整 json 文件吗?此外,结果显示了这里的输出:&lt;br&gt;Output:,但我想看看我是否正在从 sql 查询转换为 cfscript
  • 你一直在说“从 sql 查询转换为 cfscript”,但是......我们不知道你的意思是什么 :-) 我 猜测 API 数据的格式不同,或者可能有不同的列名,而您正在尝试将 JSON 转换为具有相同列的查询?如果是这样我会问为什么?即你最终用json做什么,因为可能不需要查询。尝试组合一个小的standalone example 我们可以执行。 (显然是第一次清理数据!)

标签: sql coldfusion cfml


【解决方案1】:

我要在这里破产了。您是否在数据库中有数据并且只想返回它的 JSON 表示?如

<cfquery name="result">
    SELECT ...
    FROM whereever
</cfquery>

<cfoutput>#SerializeJSON(result, 'struct')#</cfoutput>

然后其他东西试图使用这些数据?我一直在寻找你的问题,我不知道我们是在世界的生成数据方面,还是在世界的消费数据方面。

【讨论】:

  • 不.. 我想我解释得不对。所以,我想做的是根本不想使用 cfquery,而是使用 api/url 调用。因此,例如我在 sql 语句中所做的任何事情都会转换为 cfhttp/cfscript,但不要再使用 sql 语句或 cfquery。
  • 这都是客户端处理吗?就像您将代码加载到浏览器中一样,浏览器需要从 API 获取数据。但我们不是在谈论创建 API,而是在谈论创建浏览器代码?
  • 是的,基本上不再从 sql(view) 得到结果了。只需使用 api/url 执行相同的逻辑,将 cfquery 转换为 cfscript/cfhttp
【解决方案2】:

你问的是两个不同的事情。

  • SQL 定义在数据库上运行的查询。
  • CFSCRIPT 只是 ColdFusion 代码的脚本样式语法(与标签相反)。

您的示例代码是

  • 这是一些 SQL
  • 在这里,我正在读取 JSON 并使用脚本样式代码而不是标签将其转换为 ColdFusion 结构。

您是否正在尝试从当前调用数据库(将数据作为 ColdFusion 查询对象返回)到调用 API(将数据作为 JSON 数据包返回)?然后您需要将 JSON 数据转换为您当前使用的相同或相似的 CF 结构吗?

更新:如果您想用 API 调用替换现有查询,

  • API 是否已经存在?
  • 它是否返回与当前查询相同的数据?
  • 您的团队是否正在转向 API 以解耦现有代码?
  • 您是否需要了解如何将 &lt;cfquery&gt; 调用转换为 API 调用?

【讨论】:

  • 我想我没有正确解释。所以,我想做的是根本不想使用 cfquery,而是使用 api/url 调用。因此,例如我在 sql 语句中所做的任何事情都会转换为 cfhttp/cfscript,但不要再使用 sql 语句或 cfquery。
  • API 从哪里获取数据?
【解决方案3】:

这确实是一个评论,但我需要很多空间来写它。

您是否希望从远程源获取数据并将其显示在网页上。你想做这样的事情吗?

我认为我们需要澄清哪些是客户端技术,哪些是服务器端技术。

更新基于 cmets**

考虑一个 VueJS 解决方案

<!-- Showing stuff on screen -->
<div id="app">
  {{ info }}
</div>

我可以在屏幕上显示内容。这与#info# 相似,但不完全相同

<!-- Getting data -->
<cfscript>
new Vue({
  el: '#app',
  data () {
    return {
      info: null
    }
  },
  mounted () {
    axios
      .get('https://api.coindesk.com/v1/bpi/currentprice.json')
      .then(response => (this.info = response))
  }
})
<cfscript>

这是从远程源获取数据并将该数据放入 javascript 变量中。

说明

那么为什么我要使用 Javascript 而不是 ColdFusion 呢? Javascript 在浏览器上运行; ColdFusion 在服务器上运行。如果要在浏览器上使用 API,则必须使用基于浏览器的技术。

我的示例是在 VueJS 中,但 Angular 和 React 也是可选的。它有点过时了,但是 jQuery 也可以做这种事情。

代码来源:https://vuejs.org/v2/cookbook/using-axios-to-consume-apis.html

【讨论】:

  • 我已经扩展了我的答案。希望对你有帮助
  • 你在使用VueJS吗?如果是,但我没有使用 VueJS。我只是想要一些关于我上面代码的指导,如果它是一种通过在查询视图中做同样的事情来从 sql 查询视图转换为 api 调用的好方法
  • 所以你有一个网页,它调用了一个 API。网页必须获取它通过它迭代的 JSON 数据。它必须做类似 &lt;cfoutput query="mydata"&gt; 的事情。做到这一点的技术非常不同。看一看:stackoverflow.com/questions/51963481/… 这可能是您希望在迭代中做的事情。
  • James,但我不想使用 vue。看看我的cfscript,看看我的做法是否与我在cfquery 中的做法相同?这是好方法吗?
  • 我不推荐 Vue 本身。我说这是 Javascript 问题而不是 ColdFusion 问题。正在浏览器上处理数据。这与在 Web 服务器上处理并传送到浏览器不同。
猜你喜欢
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
相关资源
最近更新 更多