在WP插件的多个函数中使用通过AJAX发送的数据

时间:2016-08-08 19:07:27

标签: ajax wordpress plugins gravity-forms-plugin

这可能是范围问题,但我想涵盖所有基础。我成功地将值,距离发送到Ajax处理函数。这是JS:

    $.ajax({
    type: 'POST',
    url: url,
    data: {
        'action':'example_ajax_request',
        'distance' : distance
    },
    success:function(response) {
        // This outputs the result of the ajax request
        console.log(response);
    },
    error: function(errorThrown){
        console.log(errorThrown);
    }
});  

我可以访问后端的距离变量:

add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );

add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );

// Dynamic field population

function example_ajax_request() {

    // The $_REQUEST contains all the data sent via ajax 
    if ( isset($_POST) ) {

        $distance = $_POST['distance'];
        // echo $distance;

    }

   die();
}

$distance包含值,我可以成功回显它。但是我需要在另一个挂入重力形式的函数中使用这个值。我需要动态设置重力形式值(使用他们的gform_field_value_$parameter_name挂钩)。问题是我无法找到一种方法来访问Ajax函数之外的$_POST['distance']值,并且在$_POST['distance']可用之前引发Gravity Forms钩子(我的猜测)。

有没有办法在WP中的处理函数之外访问Ajax发送的$_POST对象?我看这一切都错了吗?关于如何使用该值动态填充Gravity Forms字段的任何建议?

提前致谢。

1 个答案:

答案 0 :(得分:0)

这是我发现的:

由于WP已经加载,因此无法在钩子中使用Ajax数据。该数据仅在前端提供。为此,你会:

    $.ajax({
  type: 'POST',
  url: url,
  data: {
    'action':'example_ajax_request',
    'distance' : distance
  },
  success:function(response) {
    // This outputs the result of the ajax request
    console.log(response);
    $('#your-GF-ID').val( response ); // This is where you update your GF field 
  },
  error: function(errorThrown){
    console.log(errorThrown);
  }
}); 

另一种选择是将数据保存在数据库中,而只是前面的Ajax。