为什么WordPress的AJAX请求返回整个HTML页面,而不是JSON结果?(Why Wordp

2019-10-29 03:18发布

我目前正试图以检查HTML表单上,如果由用户提供的电子邮件已经在数据库中。 因此,我的PHP文件有,如果get_user_by功能工作返回true。

我遵循了AJAX请求的所有WordPress的指导方针 ,并测试了这两种方法,AJAX(jQuery和香草JS)。

在错误回调结束(对应于整个当前HTML页面xhr.responseText),而香草JS方法jQuery的方法返回的成功回调,但始终返回0。

首先,我注册了我的ajax的js文件并定位其具有良好的管理-ajax.php网址。 然后我得到了我的自定义AJAX钩:wp_ajax_nopriv_get_user_by_email其中get_user_by_email是请求的动作数据。

<?php 
/* Security access : Hacker can't access php files here */
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );

add_action( 'init', 'my_script_enqueuer' );
function my_script_enqueuer() {
   wp_register_script( "ajax_user_call", MY_PLUGIN_URL.'js/ajax_user_call.js', array('jquery'));
   wp_localize_script( 'ajax_user_call', 'myAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));        

   wp_enqueue_script( 'jquery' );
   wp_enqueue_script( 'ajax_user_call' );
}

if ( is_admin() ) {
    add_action( 'wp_ajax_nopriv_get_user_by_email', 'my_plugin_ajax_get_user_by_email' );

    function my_plugin_ajax_get_user_by_email() {
        my_plugin_log_me("Is there somebody ?");
        // get the mail parameter from URL
        $mail = $_REQUEST["mail"];
        if ( isset($_REQUEST["mail"]) && !empty($_REQUEST["mail"]) ) {
            $user = get_user_by('email', $_REQUEST["mail"]);
            if ($user == false) {
                echo -2;
                wp_die();
            }
            else {
                $response['first_name'] = $user->first_name;
                $response['last_name'] = $user->last_name;

                wp_send_json($response);
            }
        }
        else {
            echo -3;
            wp_die();
        }
    }

} ?>

现在我把ajax_user_call.js:

jQuery(document).ready( function() {
  jQuery("#identificationEmailInput").blur( function() {
    jQuery.ajax({
       type: "post",
       dataType: "json",
       cache: false,
       url: myAjax.ajaxurl,
       data: { action: "get_user_by_email", mail: this.value },
       success: function(response, statut) {
          if(response == 0) {
            console.log("Veuillez rentrer une adresse mail du Club Savignac");
          }
          else {
            user = response;
            console.log("USER : " + user);
          }
       },
       error: function(xhr, textStatus, errorThrown) {
          console.log("AJAX Request failed");
          console.log(textStatus);
          console.log(errorThrown);
          console.log(xhr.responseText);
       }
    });
  });
})

jQuery的(“#identificationEmailInput”)。值返回一个良好的电子邮件字符串。 url参数myAjax.ajaxurl返回好的路径:“ http://mysite.fr/wp-admin/admin-ajax.php ”。

我也试图硬编码像这样的参数:

jQuery.post(
  "../wp-admin/admin-ajax.php",
  {
    action: 'get_user_by_email',
    mail: 'myprivate@mail.com'
  },
  function( response ) {
    console.log( response );
  }
);

然后,我也试图与香草JS喜欢它:

  var getJSON = function(url, param1, param2, successHandler, errorHandler) {
    var xhr = new XMLHttpRequest();
    xhr.open('post', url, true);
    var params = "action=" + param1 + "&mail=" + param2;
    console.log(params);
    xhr.responseType = 'json';

    xhr.onload = function() {
      var status = xhr.status;
      if (status == 200) {
        successHandler && successHandler(xhr.response);
      } else {
        errorHandler && errorHandler(status);
      }
    };
    xhr.send(params);
  };

  jQuery(document).ready( function() {
    jQuery("#identificationEmailInput").blur( function() {

      getJSON(myAjax.ajaxurl, 'get_user_by_email', jQuery("#identificationEmailInput").val(), function(data) {
          console.log('user object: ' + data);
        }, function(status) {
          console.log('Something went wrong.');
      });
    });
  })

但数据值总是返回0。

任何人有这个棘手的问题的想法? 最令人惊奇的是,这是前两天的工作,而现在它已经不而我没有做任何改变。

Answer 1:

收藏此插件PHP文件,并检查它。

 add_action('wp_ajax_nopriv_get_user_by_email', 'get_user_by_email');
    add_action('wp_ajax_get_user_by_email', 'get_user_by_email');

    function get_user_by_email(){

    $user_email  = $_POST['email'];
    //do some thing with the email

    die();
    }


文章来源: Why Wordpress AJAX request returns the entire HTML page instead of json result?