【问题标题】:Wordpress AJAX not returning custom author metaWordpress AJAX 不返回自定义作者元
【发布时间】:2013-05-13 13:20:34
【问题描述】:

现在,我正在尝试使用 AJAX 检索自定义作者元数据,以获取用户点击作者姓名时的情况。

我的 AJAX 没有返回任何内容。

我已经测试了我要发送的变量,并且该变量已正确填写,但我没有收到来自 Wordpress 的任何响应。

任何帮助将不胜感激。

请注意,PHP 在我的 functions.php 文件中,其中还有另一个函数可以创建和保存我需要从中访问信息的自定义作者元字段

谢谢,

猎人

PHP

add_action('wp_ajax_nopriv_ajax_request', 'student_meta_info');
add_action('wp_ajax_ajax_request', 'student_meta_info');

function get_student_meta_info()
{
    $studentID = $_POST['studentID'];

    $review = the_author_meta('review', $id);
    $weightloss = the_author_meta('weightloss', $id);
    $gained = the_author_meta('gained', $id);

    $AuthMeta = array("review" => $review, "weightloss" => $weightloss, "gained" => $gained);

    echo json_encode($AuthMeta);

    exit;
}

jQuery

$(document).ready(function()
{
    $('.author').click(function()
    {
        var id = $(this).attr('id');

        $.ajax({
            type: 'POST',
            action: 'student_meta_info',
            studentID: id,
            dataType: 'json',

            success: function(data)
            {
                var review = data.review;
                var weightloss = data.weightloss;
                var gained = data.gained;

                alert(data);
                alert(review);
                alert(weightloss);
                alert(gained);
            }
        });     
    });
});

【问题讨论】:

  • 不是答案,但鉴于您没有获取太多信息,我会考虑在页面加载时打印所有内容,并使用 JS 切换可见性。

标签: jquery ajax wordpress


【解决方案1】:

你需要在dataType之后指定WordPress AJAX url:

url: ajax_object.ajax_url,

要将 url 作为 var 获取,您必须 localize your script,例如:

add_action( 'wp_enqueue_scripts', 'so16523111_wp_enqueue_scripts' );
function so16523111_wp_enqueue_scripts() {
    wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my_script.js', array( 'jquery' ), '20130513', true );
    // in javascript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
    wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}

另外,将要发送的数据包装为数据参数...

data: {action:'student_meta_info',studentID:id},

... 并使用response 检查是否成功:

success: function(response)

此外,您需要调整回调和 ajax 挂钩以反映操作:

add_action( 'wp_ajax_nopriv_student_meta_info', 'get_student_meta_info' );
add_action( 'wp_ajax_ajax_student_meta_info', 'get_student_meta_info' );

最后,您必须在无冲突模式下使用 jQuery:

jQuery(document).ready(function($)

【讨论】:

  • 完美运行!非常感谢。
  • 其实,现在得到一个错误。我现在得到所有空值。为了确保,我在哪里添加 php 来本地化我的脚本?现在,它在标题中。工作过一次,然后就坏了。那么,我应该把它放在哪里呢?
  • enqueue + localize 函数应该放在你的 WP 主题的 functions.php 文件中
【解决方案2】:

在functions.php文件中,你没有把钩子附加到正确的函数上(是get_student_meta_info,不是student_meta_info):

add_action( 'wp_ajax_nopriv_ajax_request', 'get_student_meta_info' );
add_action( 'wp_ajax_ajax_request', 'get_student_meta_info' );

在 JavaScript 代码中(AJAX 调用):

var data_to_send: {
    action: 'ajax_request', // This is how you call it in the add_action hooks
    studentID: id,
    ...
}

$.ajax({
    data: data_to_sent,
    success: function(r) { ... }
});

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2013-12-27
    • 2013-11-23
    • 1970-01-01
    • 2019-04-09
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多