【问题标题】:Access Ajax POSTed data in a cfm page在 cfm 页面中访问 Ajax POST 数据
【发布时间】:2020-07-10 13:13:32
【问题描述】:

我正在尝试使用 Ajax/JQuery 提交表单,并在目标页面 (response.cfm) 上返回一个 Json,它将在表单上返回成功或失败消息(基于复选框)页(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>

【问题讨论】:

  • 响应页面有错误吗?你能检查一下coldfusion日志吗?
  • 您应该对 ajax 调用的响应执行 console.log 以查看返回的内容,我猜您使用的是 SUCCESSMESSAGE 而不是 SuccessMessage,请注意大小写的差异。

标签: jquery ajax coldfusion


【解决方案1】:

您需要检查error 的发布值,该值将在form 范围内可用。

  <cfset response = {
    SuccessMessage: form.error ? JavaCast("null", "") : "Success",
    ExceptionMessage: form.error ? "An error occurred" : JavaCast("null", "")
  }>

【讨论】:

  • 为什么我第一次尝试时没有成功?还是谢谢
【解决方案2】:

扩展 Dan 的解决方案

<cfsilent>

... 

<cfset response = [
   "SuccessMessage" : form.error ? JavaCast("null", "") : "Success",
   "ExceptionMessage" : form.error ? "An error occurred" : JavaCast("null", "")
 ]>

 ...

 <cfsilent>  

 <cfoutput> #serializeJSON(response)# </cfoutput>  

那么有哪些变化呢?

  1. 沉默是保持杂散空间最有效的方法
  2. 使用有序结构更容易调试,因为结果保持相同的顺序
  3. 使用带引号的键可以使它们保持相同的大小写,这也使得调试更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2014-10-28
    相关资源
    最近更新 更多