在做了一些研究并致力于 CF 2016 之后,我发现了一个问题。我使用 JQuery/Ajax 提交表单数据。;
如果我在符号转换为的文本区域之一中输入半列;
。我不确定是什么导致半列转换为 HTML 代码。我在提交之前检查了数据表单,如果我Test;
在控制台中输入,这将如下所示:Test%3B
。然后我在我的 cffunction 顶部的 cfmail 中转储了表单范围,表单字段值如下所示:Test;
这是我创建的 HTML/JQuery 代码的示例:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=10; IE=11" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Test Page</title>
<script type="text/javascript" src="JQuery/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="JQuery/jquery-ui.js"></script>
</head>
<body>
<div id="myContainer">
<form name="myForm" id="myForm" method="POST" action="#" class="frmSubmitData">
<fieldset>
<legend>Test Form</legend>
<div>
<span style="display: inline-block; vertical-align:top; font-weight:bold;">Comments:</span>
<textarea name="my_comments" id="my_comments" row="2" cols="55" required></textarea>
</div>
<div>
<input type="submit" name="frmSubmit" id="frmSubmit" value="Submit" />
</div>
</fieldset>
</form>
</div>
<script>
$('.frmSubmitData').on('submit', function(e){
e.preventDefault();
var formData = $('#myForm').serialize();
console.log(formData);
$.ajax({
type: 'POST',
encoding:"UTF-8",
url: 'Components/myTest.cfc?method=testForm',
data: formData,
dataType: 'json'
}).done(function(obj){
if(obj.STATUS === 200){
console.log(obj.FORMDATA);
}else{
alert('Error');
}
}).fail(function(jqXHR, textStatus, errorThrown){
alert("Error: "+errorThrown);
});
});
</script>
</body>
</html>
和冷融合功能的例子:
<cfcomponent>
<cfsetting enablecfoutputonly="yes" showdebugoutput="no" requesttimeout="3600">
<cffunction name="testForm" access="remote" output="true" returnformat="JSON">
<cfmail to="myemail@gmail.com" from="myemail@gmail.com" subject="Test Form Scope" type="text">
<cfloop collection="#form#" item="theField">
<cfoutput>#theField# = #form[theField]#<br></cfoutput>
</cfloop>
</cfmail>
<cfset fnResults = StructNew()>
<cfset fnResults.message = "Record successfully saved.">
<cfset fnResults.status = "200">
<cfset fnResults.formdata = #FORM#>
<cfreturn fnResults>
</cffunction>
</cfcomponent>
在我完成此代码之前的一个注释在 CF10 上运行良好,一旦我们升级到 CF 2016,这个问题就出现了。之前再次使用了完全相同的客户端代码,并且未转换半列宪章。如果有人遇到同样的问题并且知道如何解决这个问题,请告诉我。谢谢!