Ajax:无法读取未定义的属性“类型”

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

请问有人能帮助我解决这个问题吗?我正在尝试在模态中加载WordPress帖子(自定义帖子类型)标题/内容,但努力使其正确。我是php和ajax的新手,所以我从不同的教程中挑选了一些代码,并尝试将它们组合在一起。

所以首先我添加一个本地化我的脚本的路径:

wp_localize_script( 'darkam_global', 'openpost', array(
    'ajaxurl' => admin_url( 'admin-ajax.php' )
));

这是我的php函数的样子:

add_action( 'wp_ajax_nopriv_open_post', 'my_open_post' );
add_action( 'wp_ajax_open_post', 'my_open_post' );

function my_open_post() {
    $id = $_GET['id'];
    $post = get_post($id);

    if($post){
        wp_send_json(array('post_title' => $post->post_title, 'post_content' => $post->post_content));
    } else {
        wp_send_json(array('error' => '1'));
    }
    wp_die();
}

和我的jQuery:

( function( $ ) {
    var $modalTrigger = $('.js-modal-trigger');

    $modalTrigger.click( open_post_js );

    function open_post_js(id) {
        jQuery.ajax({
            url: openpost.ajaxurl,
            type: 'POST',
            data: {
                id: id,
                action: 'open_post'
            },
            success: function( result ) {
                alert( result['post_title'] );
            }
        })
    }
} )( jQuery );

当我触发模态时,我得到控制台错误:未捕获的TypeError:无法读取未定义的属性“类型”。警报结果也是“未定义”。

任何帮助将非常感激:)

php jquery ajax wordpress
3个回答
1
投票

在你的php中,你返回一个有效的{error:1}响应 - 但你不在你的jquery / ajax中检查这个。 所以它可能在php中失败了。

它在PHP失败,因为你没有通过id

在你的click活动中,你有:

$modalTrigger.click(open_post_js)

所以点击与调用相同:

open_post_js();

但你的功能签名是:function open_post_js(id)所以它期待一个id,例如:

open_post_js(1);

id然后“传递”到PHP,但因为它没有传递给javascript,php没有得到它所以摔倒。


你是如何解决这个问题的?您需要将id传递给open_post_js或在id中检索open_post_js,例如:

function open_post_js() {
    var id=$(this).data("id");
    ...
}

然后

<div class='js-modal-trigger' data-id="1">...</div>

1
投票

你的PHP看起来都不错,问题是你的JavaScript中的id没有分配给它的值。

如果帖子ID是被点击元素的数据属性,那么这应该有效(假设数据属性被称为data-id):

( function( $ ) {
var $modalTrigger = $('.js-modal-trigger');

$modalTrigger.click( open_post_js );

function open_post_js() {
    var id = $(this).data('id');
    jQuery.ajax({
        url: openpost.ajaxurl,
        type: 'POST',
        data: {
            id: id,
            action: 'open_post'
        },
        success: function( result ) {
            alert( result['post_title'] );
        }
    })
}
} )( jQuery );

0
投票

你试试这段代码:

header("Access-Control-Allow-Origin: *");
    header( 'Content-Type: application/json;' );
if($post){
        wp_send_json(array('post_title' => $post->post_title, 'post_content' => $post->post_content));
    } else {
        wp_send_json(array('error' => '1'));
    }

        wp_die();
© www.soinside.com 2019 - 2024. All rights reserved.