【问题标题】:Javascript / Jquery returns cfquery value of 'no' as false and 'yes' as trueJavascript / Jquery 返回 cfquery 值“no”为假,“yes”为真
【发布时间】:2019-07-20 05:32:37
【问题描述】:

我有一个有趣的问题。 我有一个 jquery ajax 命令来从 MySQL 表中获取数据(要遵循的代码) 然后,当我构建我的表时,应该是的值现在是真的,而 valse 的值不是假的。

这是我的coldfusion页面上的功能。 没什么特别的,我调用了一个 cfc 方法

function getitems()
{
  var cusno = document.getElementById("cusno").value;
  console.log("Cus No Is :" + cusno);
  $.ajax({
          type: "POST",
          url: "<cfoutput>#dir1st#</cfoutput>functions/ajax/invoices.cfc?method=getRegularInvoice",
          data: { 'cusno': cusno  },
          success: function(data){
            console.log("Data Is :" + data);
            $('#thetable tr').not(':first').not(':last').remove();
            var html = '';
            //console.log(data);
            var opts = $.parseJSON(data);
            $.each(opts, function(i, d) {
              //console.log("onceoff=" + d.onceoff);
              html += '<tr>'
                + '<td><a onclick="edititem('+ d.refid +')"><i class="text-primary fas fa-edit"></i></a>' + d.code + '</td>'
                + '<td>' + d.description + '</td>'
                + '<td>' + d.qty + '</td>'
                + '<td>' + d.price + '</td>'
                + '<td>' + d.total + '</td>'
                + '<td>' + d.dep + '</td>'
                + '<td>' + d.onceoff + '</td>'
                + '<td>' + d.regday + '/' + d.regmonth + '</td>'
                + '<td>' + d.payment_type + '</td>'
                + '<td>' + '<a onclick="if (!confirm(\'Are you sure?\')) return false;"  href="invoice_regular_delitem.cfm?cusno=<cfoutput>#URL.cusno#</cfoutput>&refid='+ d.refid +'"><i class="text-danger fas fa-trash"></i></a>' + '</td>'
                + '</tr>';

            })
            //console.log("html="+html);

            $('#thetable tr').first().after(html);

          }
        })
};

表格显示并且我的所有列都是正确的,但是,一次性列应该返回 Yes 或 No 值,但是,它返回 True 或 false。 在表中它是一个 varchar 列,所以不能这样,请参阅下面的 cfdump 以便您可以看到结果

这是导致上述结果的我的 cfc 代码

  <cffunction name="getRegularInvoice" access="remote" output="false" returnformat="json">
  <cfargument name="cusno" type="any" required="true">

    <cfquery name="getitems" datasource="#datasrc#">
        SELECT *
        FROM reg_invoice_items
        WHERE cusno = '#arguments.cusno#'
        ORDER BY code asc
    </cfquery>

    <cfset returnArray = arrayNew(1)>

      <cfloop query="getitems">

          <cfset data = structNew() />
          <cfset data['refid'] = #getitems.refid# />
          <cfset data['code'] = #getitems.code# />
          <cfset data['description'] = #getitems.description# />
          <cfset data['qty'] = #getitems.qty# />
          <cfset data['price'] = #getitems.price# />
          <cfset data['total'] = #getitems.total# />
          <cfset data['originalprice'] = #getitems.originalprice# />
          <cfset data['disc'] = #getitems.disc# />
          <cfset data['exvat'] = #getitems.exvat# />
          <cfset data['location'] = #getitems.location# />
          <cfset data['costnon'] = #getitems.costnon# />
          <cfset data['ajustnon'] = #getitems.ajustnon# />
          <cfset data['regmonth'] = #getitems.regmonth# />
          <cfset data['regday'] = #getitems.regday# />
          <cfset data['onceoff'] = "#getitems.once_off#" />
          <cfset data['dep'] = #getitems.dep# />
          <cfset data['payment_type'] = #getitems.payment_type# />
          <cfset data['currency'] = #getitems.currency# />


          <cfset arrayAppend(returnArray,data) />
      </cfloop>
      <cfreturn returnArray />

最后这里是表格的输出,一次性应该说“否”

【问题讨论】:

标签: javascript jquery coldfusion


【解决方案1】:

您没有提及您使用的是哪个版本的 CF,但是……在 ColdFusion 2016+ 中还有另一种查询选项。在 Application.cfc 中使用新的 query serialization settings 会将 yes/no 值保留为字符串,并将查询转换为与 jQuery 兼容的结构数组 - 自动。显然是应用程序级别的设置,它们将应用于应用程序中的所有查询。

  • serialization.serializeQueryAs = "struct" - 自动将应用程序中的所有查询序列化为结构数组(而不是 CF 默认使用的奇怪格式)。

  • serialization.preserveCaseForQueryColumn = true - 保留查询列名的大小写(而不是将所有内容都转换为大写)。


Application.cfc

component {
    this.name = "Your_Application_Name_Here";
    this.serialization.serializeQueryAs = "struct";
    this.serialization.preserveCaseForQueryColumn = true;
}

DemoComponent.cfc

<cfcomponent>
    <cffunction name="getData" access="remote" returntype="query">

    <!--- DEMO query. Note, manual queries MUST include column data types --->
    <cfset local.getItems = QueryNew("onceoff,exvat"
                              , "varchar,varchar"
                              , [{exvat : "yes",onceoff : "no"}]
                           )>

        <cfreturn local.getItems>
    </cffunction>   
</cfcomponent>

结果

[{"onceoff":"no","exvat":"yes"}]

【讨论】:

    【解决方案2】:

    您好,Ageax 的所有评论都是正确的。它是一个 ColdFusion 错误, 我只是添加了空格,然后稍后修剪该值,它工作得很好。

    非常感谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-07
      • 2012-07-17
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      相关资源
      最近更新 更多