【发布时间】: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 />
最后这里是表格的输出,一次性应该说“否”
【问题讨论】:
-
什么版本的CF?听起来像这个问题How to prevent SerializeJSON from changing Yes/No/True/False strings to boolean?。 FWIW,它已在 CF2018 中修复(不确定 2016 年)。
-
How can I prevent SerializeJSON from changing Yes/No/True/False strings to boolean? 的可能重复项。解决方法是在值后附加一个空格,因此 CF 将其视为字符串。如果需要,修剪 JS 代码中的额外空间
-
与您的问题无关,但强烈建议在查询参数上使用
cfqueryparam以保护sql-i。此外,cfset 语句中不需要任何井号,即使用<cfset data['dep'] = getitems.dep />而不是<cfset data['dep'] = #getitems.dep# />
标签: javascript jquery coldfusion