在 cfm 页面中访问 Ajax 发布的数据
Access Ajax POSTed data in a cfm page
我正在尝试使用 Ajax/JQuery 提交表单,在目标页面 (response.cfm) 上,我 returning Json 将 return 表单页面 (form.cfm) 上的成功或失败消息(基于复选框)。但我似乎无法访问 ajax 请求发送的数据。
form.cfm
<form id="frm_test">
<input type="text" name="firstname" id="firstname" placeholder="First name" required /><br>
<input type="text" name="surname" id="surname" placeholder="Surname" required /><br>
<input type="email" name="email" id="email" placeholder="Email" required /><br>
<input type="checkbox" name="error" id="error" />Return error (check to see the error message. leave empty to see a success message)<br>
<input type="submit" value="Save changes" id="submitdata" />
</form>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$("#frm_test").submit(function (eventData) {
event.preventDefault();
$("#message").empty();
var postData = {
first_name: $('#firstname').val(),
family_name: $('#surname').val(),
email: $('#email').val(),
error: $('#error').is(':checked')
};
$.ajax({
url: "response.cfm",
method: "POST",
data: postData
}).done(
function(response) {
if (response["SUCCESSMESSAGE"] !== null) {
$("#message").append(response["SUCCESSMESSAGE"]);
} else if (response["EXCEPTIONMESSAGE"] !== null) {
$("#message").append(response["EXCEPTIONMESSAGE"]);
}
});
$("#frm_test").trigger("reset");
});
</script>
<div id="message"></div>
response.cfm
<cfprocessingdirective suppresswhitespace="Yes">
<cfset response = {
SuccessMessage: 'checkbox value' ? JavaCast("null", "") : "Success",
ExceptionMessage: 'checkbox value' ? "An error occurred" : JavaCast("null", "")
}>
<cfheader name="Content-Type" value="application/json">
<cfoutput> #serializeJSON(response)# </cfoutput>
</cfprocessingdirective>
您需要检查 error
的发布值,该值将在 form
范围内可用。
<cfset response = {
SuccessMessage: form.error ? JavaCast("null", "") : "Success",
ExceptionMessage: form.error ? "An error occurred" : JavaCast("null", "")
}>
扩展 Dan 的解决方案
<cfsilent>
...
<cfset response = [
"SuccessMessage" : form.error ? JavaCast("null", "") : "Success",
"ExceptionMessage" : form.error ? "An error occurred" : JavaCast("null", "")
]>
...
<cfsilent>
<cfoutput> #serializeJSON(response)# </cfoutput>
那么有哪些变化呢?
- 沉默是保持杂散空间最有效的方法
- 使用有序结构更易于调试,因为结果保持相同顺序
- 使用带引号的键使它们保持相同的大小写,这也使调试更容易。
我正在尝试使用 Ajax/JQuery 提交表单,在目标页面 (response.cfm) 上,我 returning Json 将 return 表单页面 (form.cfm) 上的成功或失败消息(基于复选框)。但我似乎无法访问 ajax 请求发送的数据。
form.cfm
<form id="frm_test">
<input type="text" name="firstname" id="firstname" placeholder="First name" required /><br>
<input type="text" name="surname" id="surname" placeholder="Surname" required /><br>
<input type="email" name="email" id="email" placeholder="Email" required /><br>
<input type="checkbox" name="error" id="error" />Return error (check to see the error message. leave empty to see a success message)<br>
<input type="submit" value="Save changes" id="submitdata" />
</form>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$("#frm_test").submit(function (eventData) {
event.preventDefault();
$("#message").empty();
var postData = {
first_name: $('#firstname').val(),
family_name: $('#surname').val(),
email: $('#email').val(),
error: $('#error').is(':checked')
};
$.ajax({
url: "response.cfm",
method: "POST",
data: postData
}).done(
function(response) {
if (response["SUCCESSMESSAGE"] !== null) {
$("#message").append(response["SUCCESSMESSAGE"]);
} else if (response["EXCEPTIONMESSAGE"] !== null) {
$("#message").append(response["EXCEPTIONMESSAGE"]);
}
});
$("#frm_test").trigger("reset");
});
</script>
<div id="message"></div>
response.cfm
<cfprocessingdirective suppresswhitespace="Yes">
<cfset response = {
SuccessMessage: 'checkbox value' ? JavaCast("null", "") : "Success",
ExceptionMessage: 'checkbox value' ? "An error occurred" : JavaCast("null", "")
}>
<cfheader name="Content-Type" value="application/json">
<cfoutput> #serializeJSON(response)# </cfoutput>
</cfprocessingdirective>
您需要检查 error
的发布值,该值将在 form
范围内可用。
<cfset response = {
SuccessMessage: form.error ? JavaCast("null", "") : "Success",
ExceptionMessage: form.error ? "An error occurred" : JavaCast("null", "")
}>
扩展 Dan 的解决方案
<cfsilent>
...
<cfset response = [
"SuccessMessage" : form.error ? JavaCast("null", "") : "Success",
"ExceptionMessage" : form.error ? "An error occurred" : JavaCast("null", "")
]>
...
<cfsilent>
<cfoutput> #serializeJSON(response)# </cfoutput>
那么有哪些变化呢?
- 沉默是保持杂散空间最有效的方法
- 使用有序结构更易于调试,因为结果保持相同顺序
- 使用带引号的键使它们保持相同的大小写,这也使调试更容易。