【问题标题】:Ajax Request not processing POST VariablesAjax 请求不处理 POST 变量
【发布时间】:2017-06-23 10:45:52
【问题描述】:

在过去的几个小时里,我已经阅读了每一篇文章,并尽我所能 - 所以我向社区寻求帮助!

我有一个 BMI 计算器,它运行良好。但是我正在尝试通过 AJAX 处理表单,现在我的 ajax 请求工作正常并且我收到了响应,但它不包含我的任何 POST 数据。

另外让我提一下我正在使用 WordPress。

这是我的 AJAX:

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

    /*--------------------------------------------------------------
     # BMI Calculator Ajax Call
     --------------------------------------------------------------*/
    $('form#bmi-calculator').on( 'submit', function(e) {

        // ajax request
        $.ajax({
            url : ajax_object.ajax_url,
            type : 'POST',
            data : {
                'action' : 'fitnessgym_bmi_calculator',
            },
            success : function( response ) {
                $('.bmi-results').append( response );
                console.log( response );
            },
            alert : function( error ) {
                alert( 'error' )
            }

        });
        e.preventDefault();
    });

});

这是我的回调函数:

/*-------------------------------------------------------------------
  Process the BMI Calculator
--------------------------------------------------------------------*/
add_action( 'wp_ajax_fitnessgym_bmi_calculator', 'fitnessgym_bmi_calculator' );
add_action( 'wp_ajax_nopriv_fitnessgym_bmi_calculator', 'fitnessgym_bmi_calculator' );


function fitnessgym_bmi_calculator() {

    // Sanitize post variables.
    $allowed_html = array();
    $weight = trim(sanitize_text_field(wp_kses($_POST['bmi_weight'], $allowed_html)));
    $height = trim(sanitize_text_field(wp_kses($_POST['bmi_height'], $allowed_html)));
    $age = trim(sanitize_text_field(wp_kses($_POST['bmi_age'], $allowed_html)));

    // Do the Calculation.
    $equation = $weight / $height;

    echo 'Weight is: ' . $weight . '<br>';
    echo 'Height is: ' . $height . '<br>';


    // If BMI is Healthy or Not.
    if ($equation < 18.5) {
        $health = esc_html__('Underweight', 'fitnessgym');
    } elseif ($equation > 18.5 && $equation < 24.9) {
        $health = esc_html__('Healthy', 'fitnessgym');
    } elseif ($equation > 25 && $equation < 29.9) {
        $health = esc_html__('Overweight', 'fitnessgym');
    } elseif ($equation > 30) {
        $health = esc_html__('Obese', 'fitnessgym');
    }

    $bmi_response = 'Your BMI is:' . number_format(esc_html($equation), 1) . '<br>Your health is: ' . $health;

    echo $bmi_response;

    wp_die();

}

基本上,当我提交表单时,返回的是:

Weight is: 
Height is: 
Your BMI is:
Your health is: Underweight

所以没有任何 POST 信息。另外让我提一下,我已经尝试过没有任何清理的 POST 变量(包含任何人推荐的):)

我一生都想不通,为什么这不会显示。任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 我感觉你当前函数中的每个人都会体重过轻。使用 firebug 之类的东西或其他东西,这样你就可以看到发送到你的 ajax 脚本的内容。
  • 您的函数是否在脚本中的任何位置被调用?您不能直接从 AJAX 调用中调用它们。您需要定义一个您请求的 url,并且该 url 需要使用您的函数。
  • 您在ajax中的数据字段需要包含丢失的post数据。
  • 我正在使用 wp_localize_script,它传入 admin_url('admin-ajax.php'),这是必须发送所有 WordPress ajax 请求的 URL。我的回调函数是“fitnessgym_bmi_calculator”,它处理一切。

标签: javascript php jquery ajax wordpress


【解决方案1】:

您没有在后端发送您期望的数据。

再看看你的 ajax 调用

$.ajax({
    ...
    data : {
        'action': 'fitnessgym_bmi_calculator',
    },
    ...
});

添加你期望得到的数据是

{
    'action': 'fitnessgym_bmi_calculator',
    'bmi_weight': 0,
    'bmi_height': 0.
    'bmi_age': 0
}

将那些缺少的键值对添加到data,一切都会正常。

【讨论】:

  • 感谢您的帮助,总结得差不多了。当我将值传递给操作时,计算器正在工作。所以这回答了我的问题:) 我现在想知道的另一件事是如何将我的 POST 变量传递给我的 JS 文件,wp_localize_script 不允许我通过 POST 变量 - 你有关于我应该如何做的建议吗? ?谢谢!
  • 我明白了!你让我走上正轨,谢谢大家!我传入“'bmi_weight' : $('#bmi-calculator #bmi_weight').val()” 来获取其中的 POST 值,计算器正在运行!
猜你喜欢
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 2014-05-12
  • 2014-05-09
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多