【问题标题】:Need help logging errors from Ajax form submission需要帮助记录来自 Ajax 表单提交的错误
【发布时间】:2021-04-28 18:50:58
【问题描述】:

我正在制作一个简单的表单,该表单通过他们的 API 将数据发送到客户线索管理数据库。当它们是输入到系统中的重复电子邮件时,表单会返回 400 错误。当这个或其他问题发生时,我需要能够在控制台中抛出错误并将错误记录在我的 Wordpress Child 主题中的文本文件中。我似乎无法在控制台中报告错误以及如何将错误发送到 txt 文件。如果表单提交正常,那么一切正常,我得到 200 并且领先进入。这是我目前所拥有的:

<form class="mbform" id="base_form" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post">
<div class="field">
    <input for="base_form" id="first-name" type="text" name="base_fname" placeholder="First Name*" required><br>
</div>
<div class="field">
    <input for="base_form" id="last-name" type="text" name="base_lname" placeholder="Last Name*" required><br>
</div>
<div class="field">
    <input for="base_form" id="email" type="text" name="base_email" placeholder="Email*" required><br>
</div>
<div class="field">
    <input for="base_form" id="phone" type="tel" pattern="[(]\d{3}[)][\s]\d{3}[\-]\d{4}" name="base_phone" placeholder="Mobile*" required><br>
</div>
<input type="hidden" name="action" value="custom_action">
<div class="field submit-button">
    
        <button class="button mbgo" for="base_form" type="submit" name="base_submit">Claim Offer</button>
</div>
</form>
<script>
jQuery(document).ready(function($) {

$('#base_form').on('submit', function(e) {
    e.preventDefault();
 
    var $form = $(this);
 
    var settings = {
          "url": "https://apiendpoint.com/api/WorkOrder/PostAllWorkOrder",
          "method": "POST",
          "timeout": 0,
          "headers": {
            "Authorization": "Bearer jTs1OCFtj5HRhYJmqRjbO35F0x0BnAmyV05hTLUzZjTbXWbfvmhhDXCp4oU8Zg9_Ec6z34n5nkCQOLRMPsK4JnM_NZiVFJGf6DRxkWQt4DzOfFhT06q2KalQrrmA5WoykVLLIE5RR8A1m34TUK37gh4E08zwC3hwW4rnQfIhez30MLDCR-PWEXTfhP5DugjzCrzoR05B15ggXt3OxoRNKxeWgcCw6Q6-E5Cl6Wlkge5iiH3DKoUqAn2tJ1m2UlXobWXSG86o3yfQsPfI7966Uy5zGU7UGB4RTD-Cz8I2U2PC7a4L-TK6UbAem2d2zfusYor81iuMcHfRCsZm60YCtGfbatuYxGXe7HCHmH6mtU8S-aGPJFhpdcyjsa7lx44_KhYzR6EsnKixgu26Wu-qnHmbKaBBKDdqZBMxrJo4tNVM9772WfjdNQpKIDfytZCWQj-iyhmerqdg9mIt3v9Ez79LKliPXXhFkgoESECKhMaHUNLX",
            "Content-Type": "application/json",
            "Cookie": ".AspNet.Cookies=3iF1xtlsAqyPyTxheHIYgFkvYtepDaZk8UnqLYbkezCdSGVSFCaQwl_9JqTJ8UJ8ytHZ5zrS-vwc3bkbwbJjjZdjn6gRKAMuUG6S2ANvUX94GoIC0-RGW_gXbr2aA-Qle4f8KnPRFKF0BEIBV0Kacxk51u7wBOyJiR7XGSVfrNq5F-fVTAnkrX4o8S0YLm7HC8WhyLgGMlpy6IhmXUplvwMbeQ7y9ZkSizGl9ETrYSr4vYP3tj7hAS-JCvsXm_UaI705bl_lo_iFdbrKaTAN9CONVV-KV1WpmGx-n3J__731wyr20_V1pBy4szbZ2rXych_Ik-b2kiVhj3zikE7q4iiL4k8wD8DiFHYQC_DnqbwFG0hKqs-YU5EEb-0TYSW3mChFUbVVJpEiJ5wxYpmO8Lni9JsNTf_baf-_QYWVRXaE5P5vnfN9gJHIm3Me6oFdvpo3YIPSm6Yci--LDUVeiLtTg10"
          },
          "data": {
            "FRANCHISEID": 1,
            "WSTicketNumber": "487260",
            "SERVICETYPEID": 0,
            "LeadSourceId": "1",
            "Note": "N/A",
            "IsLeadOnly": true,
            "Customer": {
              "FirstName": jQuery("#first-name").val(),
              "LastName": jQuery("#last-name").val(),
              "Address": null,
              "Address2": null,
              "City": null,
              "State": null,
              "PostalCode": null,
              "Email": jQuery("#email").val(),
              "Phone": jQuery("#phone").val(),
              "PhoneType": "Cell Phone",
              "PreferredCommunicationType": "phone",
              "MemberSecondaryIndexCode": "50"
            }
          }
        };

        var allData = settings.data.Customer;
        $.ajax(settings).done(function (response) {
          console.log(response);
                $("#error").html("<div id='message'></div>");
                $("#message")
                  .html("<h2>Contact Form Submitted!</h2>")
                  .append("<p>We will be in touch soon.</p>")
        });

        $.ajax(settings).fail(function (response) {
            console.log(response);
            console.log(allData);
            var message = allData.FirstName;
                $("#error").html("<div id='message'></div>");
                $("#message")
                  .html("<h2>There was an issue with your recent submission</h2>")
                  .append("<p>" + message + "</p>")
        });
});
 

$("input[name='base_phone']").keyup(function() {
$(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d+)$/, "($1) $2-$3"));
});
});
</script>

【问题讨论】:

  • 欢迎来到 Stack Overflow。所以你问如何处理其他不是 200 的状态码?你想让它做什么?
  • “我正在努力做到这两点” 不足以解释您的问题。请编辑您的问题,以清楚完整地解释问题的实际情况。指出您尝试过的事情、您期望发生的事情、应该发生的事情以及当前发生的事情。
  • 另外,当.fail() 应该附加到第一个 AJAX 调用时,它看起来像附加到第二个 AJAX 调用。查看更多:api.jquery.com/jquery.ajax
  • 另外,如果您想将错误存储在文件中,您需要在后端(您的 PHP)中执行此操作。如果您尝试过,请也发布该部分。我还建议不要将错误日志存储在子主题中,因为任何人都可以下载它。而是将其放在文档根目录之外。
  • 我没有设置任何PHP。我在帖子中使用 Wordpress ajax 文件。

标签: javascript php html jquery ajax


【解决方案1】:

考虑以下内容。

jQuery(document).ready(function($) {

  $('#base_form').on('submit', function(e) {
    e.preventDefault();

    var $form = $(this);

    var settings = {
      "url": "https://apiendpoint.com/api/WorkOrder/PostAllWorkOrder",
      "method": "POST",
      "timeout": 0,
      "headers": {
        "Authorization": "Bearer jTs1OCFtj5HRhYJmqRjbO35F0x0BnAmyV05hTLUzZjTbXWbfvmhhDXCp4oU8Zg9_Ec6z34n5nkCQOLRMPsK4JnM_NZiVFJGf6DRxkWQt4DzOfFhT06q2KalQrrmA5WoykVLLIE5RR8A1m34TUK37gh4E08zwC3hwW4rnQfIhez30MLDCR-PWEXTfhP5DugjzCrzoR05B15ggXt3OxoRNKxeWgcCw6Q6-E5Cl6Wlkge5iiH3DKoUqAn2tJ1m2UlXobWXSG86o3yfQsPfI7966Uy5zGU7UGB4RTD-Cz8I2U2PC7a4L-TK6UbAem2d2zfusYor81iuMcHfRCsZm60YCtGfbatuYxGXe7HCHmH6mtU8S-aGPJFhpdcyjsa7lx44_KhYzR6EsnKixgu26Wu-qnHmbKaBBKDdqZBMxrJo4tNVM9772WfjdNQpKIDfytZCWQj-iyhmerqdg9mIt3v9Ez79LKliPXXhFkgoESECKhMaHUNLX",
        "Content-Type": "application/json",
        "Cookie": ".AspNet.Cookies=3iF1xtlsAqyPyTxheHIYgFkvYtepDaZk8UnqLYbkezCdSGVSFCaQwl_9JqTJ8UJ8ytHZ5zrS-vwc3bkbwbJjjZdjn6gRKAMuUG6S2ANvUX94GoIC0-RGW_gXbr2aA-Qle4f8KnPRFKF0BEIBV0Kacxk51u7wBOyJiR7XGSVfrNq5F-fVTAnkrX4o8S0YLm7HC8WhyLgGMlpy6IhmXUplvwMbeQ7y9ZkSizGl9ETrYSr4vYP3tj7hAS-JCvsXm_UaI705bl_lo_iFdbrKaTAN9CONVV-KV1WpmGx-n3J__731wyr20_V1pBy4szbZ2rXych_Ik-b2kiVhj3zikE7q4iiL4k8wD8DiFHYQC_DnqbwFG0hKqs-YU5EEb-0TYSW3mChFUbVVJpEiJ5wxYpmO8Lni9JsNTf_baf-_QYWVRXaE5P5vnfN9gJHIm3Me6oFdvpo3YIPSm6Yci--LDUVeiLtTg10"
      },
      "data": {
        "FRANCHISEID": 1,
        "WSTicketNumber": "487260",
        "SERVICETYPEID": 0,
        "LeadSourceId": "1",
        "Note": "N/A",
        "IsLeadOnly": true,
        "Customer": {
          "FirstName": jQuery("#first-name").val(),
          "LastName": jQuery("#last-name").val(),
          "Address": null,
          "Address2": null,
          "City": null,
          "State": null,
          "PostalCode": null,
          "Email": jQuery("#email").val(),
          "Phone": jQuery("#phone").val(),
          "PhoneType": "Cell Phone",
          "PreferredCommunicationType": "phone",
          "MemberSecondaryIndexCode": "50"
        }
      }
    };

    var allData = settings.data.Customer;
    var request = $.ajax(settings).done(function(response) {
      console.log(response);
      $("#error").html("<div id='message'></div>");
      $("#message")
        .html("<h2>Contact Form Submitted!</h2>")
        .append("<p>We will be in touch soon.</p>")
    });

    request.fail(function(response) {
      console.log(response);
      console.log(allData);
      var message = allData.FirstName;
      $("#error").html("<div id='message'></div>");
      $("#message")
        .html("<h2>There was an issue with your recent submission</h2>")
        .append("<p>" + message + "</p>")
    });
  });

  $("input[name='base_phone']").keyup(function() {
    $(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d+)$/, "($1) $2-$3"));
  });
});

这将在发出请求后立即分配处理程序,并记住此 request 的 jqXHR 对象。

查看更多:https://api.jquery.com/jquery.ajax/

【讨论】:

  • 这很有帮助。数据正在我现在需要的控制台日志中输出。所以下一步是在出现错误时将控制台日志信息传递给一个txt文件。
猜你喜欢
  • 2012-12-19
  • 2015-09-16
  • 1970-01-01
  • 2014-02-09
  • 2011-12-31
  • 2023-04-09
  • 1970-01-01
  • 2016-03-08
  • 2011-02-24
相关资源
最近更新 更多