我试图通过前端的ajax发帖,但我总是失败。
我做错了什么? 这是我的代码它返回0:
HTML
<form id="add" name="add" method="post" enctype="multipart/form-data">
<label for="title">Title</label>
<input id="title" type="text" name="post_title" value="">
<input type="hidden" name="action" value="my_action">
<input id="submit" value="Submit" type="submit">
</form>
PHP
wp_enqueue_script( 'my-ajax-request', '/js/my_js.js' );
wp_localize_script( 'my-ajax-request', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'MyAjax.action' => 'my_action', 'MyAjax.post_title' => $_POST['post_title'] ) );
add_action('wp_ajax_nopriv_my_action', 'addpost_ajax_handler' );
add_action('wp_ajax_my_action', 'addpost_ajax_handler' );
function addpost_ajax_handler() {
echo 'reached ajax handler'; // delete this line later
if( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
$title = $_POST['post_title'];
$my_post = array(
'post_title' => $title
);
$result = wp_insert_post( $my_post );
if ( ! is_wp_error( $result ) ) echo 'success';
}
die();
}
my_js.js
$('#submit').on('click', function(e) {
e.preventDefault();
var data = { 'action': MyAjax.action, 'post_title': MyAjax.post_title };
$.post(MyAjax.ajaxurl, data, function(response) {
alert(response);
});
});
答案 0 :(得分:1)
要检查你是否真的从php中的函数接收数据,请添加一些内容:
function addpost_ajax_handler() {
echo 'reached ajax handler'; // delete this line later
if( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
$title = $_POST['post_title'];
$my_post = array(
'post_title' => $title
);
$result = wp_insert_post( $my_post );
if ( ! is_wp_error( $result ) ) echo 'success';
}
die();
}
如果你仍然只是0,请尝试确保以一种可以理解的方式发送动作参数:
data: { action: my_action, datastr: dataString },
另一个可能的麻烦制造者可能是相对URL,您应该使用完整的URL路径来确保您的脚本运行,而不管您所在的页面。为此,请检查http://codex.wordpress.org/AJAX_in_Plugins,看看他们如何使用wp_localize_script发送正确的管理员网址。
答案 1 :(得分:0)
你可以先尝试评论一下插入的代码,然后回复'到达的ajax处理程序',首先验证ajax请求是否成功然后你可以继续添加帖子插入代码一步一步。
除此之外,您还可以添加“其他”部分,例如 否则{echo'失败';} 只是为了验证创建新帖子时是否存在问题,并在响应中返回“失败”。
答案 2 :(得分:0)