繁体   English   中英

wordpress wp_ajax 返回 400 错误请求

[英]wordpress wp_ajax returning 400 bad request

浏览器控制台返回错误:400 bad request

通过将响应值从 0 更改为 1,我在 admin-ajax.php 文件中将错误跟踪到了这一部分:

if ( is_user_logged_in() ) {
// If no action is registered, return a Bad Request response.
if ( ! has_action( "wp_ajax_{$action}" ) ) {
    wp_die( '0', 400 );
}

我尝试了一切,但不幸的是我不明白这个登录的真正含义以及它是如何工作的。

我看到有些人对主机有问题,就我而言,我使用的是托管程序。 (我认为这无关紧要,但在这里。)

Javascript

function formValidation() {
  event.preventDefault();
  var name = document.forms["contactForm"]["name"].value;
  var email = document.forms["contactForm"]["email"].value;
  var subject = document.forms["contactForm"]["subject"].value;
  var message = document.forms["contactForm"]["message"].value;
  document.getElementById('status').innerHTML = '';
  var errorMessage="<span class='error'>All fields are required.</span>";
  var regEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

     if (name.trim() == "" ||email.trim() == "" || subject.trim() == "" || message.trim() == "") {
         document.getElementById('status').innerHTML = errorMessage;
         return false;
       }
   if (!regEx.test(email)) {
       var errorMessage="<span class='error'>Invalid email.</span>";
        document.getElementById('status').innerHTML = errorMessage;
        return false;
      }
  processContactSubmit();
  return true;
}

function processContactSubmit() {
            var request = new XMLHttpRequest();
            request.open("POST", "/wp-admin/admin-ajax.php?action=process_contact_form");
            request.onreadystatechange = function() {
                if(this.readyState === 4 && this.status === 200) {
                    document.getElementById("status").innerHTML = this.responseText;
                }
            };
            var myForm = document.getElementById("contactForm");
            var formData = new FormData(contactForm);
            request.send(formData);}

函数.php

add_action('wp_ajax_nopriv_process_contact_form', 'process_contact_form');
add_action('wp_ajax_process_contact_form', 'process_contact_form'); //Retirar essa parte para error no console, no contrario ira aparecer no navegador o numero 0.

function process_contact_form() {
    $to = "Recipient Email Address";
    $subject = $_POST["subject"];
    $headers = "Testing";
    $message = $_POST["message"];
    $attachments = "";
    $sent = wp_mail($to, $subject, $message, $headers, $attachments);
    if (! $sent) {
        echo "<span class='error'>Problem in sending mail.</span>";
    } else {
        echo "<span class='success'>Hi, thank you for the message.</span>";
    }
    wp_die();}

HTML 表单

<form name="contactForm" id="contactForm" method="post" onsubmit="return formValidation()"  action="">

这是您使用 FormData 的方式:

var formData = new FormData();
formData.append("subject", "value");
formData.append("message", "hello value");

这是对我有用的代码:(我认为唯一的区别是网址)

var url = "<?php echo admin_url('admin-ajax.php'); ?>";
function do_ajax() {
    var request = new XMLHttpRequest();
    request.open("POST", url + "?action=process_contact_form");
    request.onreadystatechange = function () {
        if (this.readyState === 4 && this.status === 200) {
            alert(this.responseText);
        }
    };
    var formData = new FormData();
    formData.append("subject", "value");
    formData.append("message", "hello value");
    request.send(formData);
}   

在服务器上:


add_action('wp_ajax_nopriv_process_contact_form', 'process_contact_form');
add_action('wp_ajax_process_contact_form', 'process_contact_form');

function process_contact_form()
{
    echo $_POST["message"];
    die();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM