【发布时间】:2014-11-07 15:24:57
【问题描述】:
我尝试在前端通过 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);
});
});
【问题讨论】:
-
首先您应该验证您的 ajax 调用是否达到了您的功能。现在你没有返回任何东西,最后只是一个
die();应该返回 0。你首先在函数中回显一些东西怎么样。 -
如果没有,请尝试使用对象而不是包含
action参数的序列化数据字符串。 -
@MSTannu,函数应该返回帖子 ID。如果不使用 Ajax 就可以发送数据
-
wp_insert_post 返回一个值,但要将其发回您还需要回显它。
-
@MSTannu,你能帮忙吗?我不明白你的意思
标签: php ajax wordpress frontend posting