[admin-ajax返回0-不向db提交表单数据

问题描述 投票:0回答:1

我正在尝试将表单数据发送到名为attendants的表。我已经创建了表单,AJAX和查询,但是尝试进行测试(提交表单时)时,控制台上出现POST http://localhost/rsvp/wp-admin/admin-ajax.php 400 (Bad Request)错误。

不确定是什么原因造成的,因为当我运行console.log(ajaxurl);时,它返回的URL是http://localhost/rsvp/wp-admin/admin-ajax.php,这是正确的。

不确定这里发生了什么吗?

编辑:我最近发现http://localhost/rsvp/wp-admin/admin-ajax.php返回0

form.php文件夹路径:rsvp>模板零件>零件> form.php):

<div class="form sectionPadding" id="rsvp-form">
  <form id="rsvpForm" method="post">
    <?php get_template_part('template-parts/snippets/form-step-1'); ?>
    <?php get_template_part('template-parts/snippets/form-step-2'); ?>
  </form>
</div>

<script type="text/javascript">
  var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
</script>

form.jsform.js编译为theme.min.jstheme.min.js的路径为rsvp>资产>构建> js> theme.min.js):

jQuery('#rsvpForm').on('submit', function(e) {
  e.preventDefault();

  jQuery.ajax({
    action: 'send_to_db',
    dataType: "text",
    type: "post",
    data: $('form').serialize(),
    url: ajaxurl,

    success: function(data) {
      console.log(data);
    },
    error: function() {
      console.log("Error");
    }
  });


});

functions.php

add_action("wp_ajax_send_to_db", "send_to_db");
add_action("wp_ajax_nopriv_send_to_db", "send_to_db");

function send_to_db(){
	if (isset($_POST['submit'])) {

		global $wpdb;

		$first_name = $_POST['fname'];

		$table_name = $wpdb->prefix . "attendants";
		$row_result = $wpdb->query("INSERT INTO $table_name (first_name) VALUES ('$first_name')" );

		if ($row_result == 1){
			echo "submitted";
		} else{
			echo "error";
		}

		die();
	}
}

总而言之,我的文件夹结构是:

rsvp
   assets
      build
         js
            theme.min.js
   template-parts
      parts
         form
            form.php
            form.js
functions.php
javascript php jquery ajax wordpress
1个回答
0
投票

编辑:我最近发现http://localhost/rsvp/wp-admin/admin-ajax.php返回0。

这确实是预期的返回值,因为您的请求URL不包含AJAX action名称。另外,HTTP响应状态也将是一个400 Bad Request,这基本上意味着“缺少操作名称”或“该操作的未注册任何回调”。

在您的情况下,您的AJAX脚本似乎没有发送AJAX动作。

因为在您的form.js脚本中,action参数应该在data中-并且据我所知,jQuery.ajax()没有action属性:

jQuery.ajax({
  action: 'send_to_db', // this should be in 'data'
  ...
  data: $('form').serialize(),
  ...
});

所以您可以像这样:data: $('form').serialize() + '&action=send_to_db'

jQuery.ajax({
  ...
  data: $('form').serialize() + '&action=send_to_db',
  ...
});

这样,WordPress将识别AJAX操作(通过$_REQUEST['action']),然后运行适当的AJAX handler / PHP callback,在您的情况下为send_to_db()

并且您可以通过访问/wp-admin/admin-ajax.php?action=send_to_db来确认您的AJAX回调是否已正确注册-您是否仍然看到0

© www.soinside.com 2019 - 2024. All rights reserved.