Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Ajax:无法读取属性';类型';未定义的_Php_Jquery_Ajax_Wordpress - Fatal编程技术网

Php Ajax:无法读取属性';类型';未定义的

Php Ajax:无法读取属性';类型';未定义的,php,jquery,ajax,wordpress,Php,Jquery,Ajax,Wordpress,谁能帮我把脑袋绕在这上面吗? 我试图在modal中加载WordPress帖子(自定义帖子类型)标题/内容,但很难做到正确。我对php和ajax非常陌生,所以我从不同的教程中挑选了一些代码片段,并尝试将它们组装在一起 因此,首先我添加一个路径来本地化我的脚本: wp_localize_script( 'darkam_global', 'openpost', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) )); 这就是我的php函

谁能帮我把脑袋绕在这上面吗? 我试图在modal中加载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 );
当我触发模式时,我得到控制台错误:UncaughtTypeError:无法读取未定义的属性“type”。此外,警报结果为“未定义”

任何帮助都将不胜感激:)

您可以尝试以下代码:

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();

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

它在php中失败,因为您没有传递
id

单击
事件连线中,您有:

$modalTrigger.click(open_post_js)
因此,单击与调用相同:

open_post_js();
但是您的函数签名是:
function open\u post\u js(id)
,因此它需要一个
id
,例如:

open_post_js(1);
function open_post_js() {
    var id=$(this).data("id");
    ...
}
然后,
id
被“传递”到php,但因为它没有传递到javascript,所以php没有得到它,所以它被忽略了


你怎么解决这个问题?您需要将
id
传递到
open\u post\u js
或在
open\u post\u js
中检索
id
,例如:

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

。。。

您的PHP看起来都不错,问题是JavaScript中的
id
没有赋值

如果post ID是正在单击的元素上的数据属性,那么这应该起作用(假设数据属性名为
data ID
):


什么是
console.log(结果)返回?对于简单类型(字符串/数字)以外的任何类型,请不要使用
alert()
)-始终使用
console.log
感谢您的提示!console.log返回:
{error:“1”}
非常感谢@freedomn-m的详细解释!我刚刚尝试了你的建议,即使我不再得到控制台错误,控制台日志仍然返回:
{error:“1”}
,这可能意味着它没有从我的php函数中获取post id。我怎样才能解决这个问题?检查您发送给php的内容。看起来它仍然没有发送它(并且确保你有一个匹配的id用于
get_post
实际上它不是我要“发送”的,而是我应该从php“获取”的,所以我将ajax类型改为get,现在它像charm:)非常感谢你的帮助freedomn-m!!非常感谢!我不知道php如何使用
GET
vs
POST
处理参数。jquery通常会将数据发送到
POST
body
中,以及
GET
的url中,因此这可能是您读取
POST
参数的方式。如果你真的在获取数据,那么最好还是使用GET。啊,我没有看到freedomn-m在我之前给出了相同的答案。你的帮助仍然非常感谢!谢谢你的意见,西蒙!谢谢你的建议,李泉!我已经设法使它与接受的答案工作!