实现AJAX帖子的问题

时间:2014-09-04 21:43:59

标签: javascript php jquery ajax wordpress

我有一个HTML链接,这里是(发布php解释):

<a href="javascript:void(0)" onclick="vote_comment(28, 1);" class="vote-arrow">
     <img id="up-arrow-pic-comment-28" src="http://localhost/wordpress/wp-content/themes/backyard-    cures/images/up_arrow_grey.png" alt="vote up" />
</a>

这是它正在调用的函数:

function vote_comment(comment_id, direction) {
    $.post('http://localhost/wordpress/wp-content/themes/backyard-cures/backyard_funcs.php',
           {voteType: direction, postId: comment_id, type: 'comment'},
           'updateIcon(vote_count, direction, comment_id)',
           'json');
}

这是backyard_funcs.php:

if (isset($_POST['voteType'], $_POST['postId']) && is_user_logged_in()) {

    if($_POST['type'] == 'comment') {
        if (!get_user_meta(get_current_user_id(),'byc_comment_votes',true)) {
            add_user_meta(get_current_user_id(),'byc_comment_votes',array($_POST['postId'] => $_POST['voteType']),true)
            echo json_encode(array('vote_count' => $_POST['voteType'], 'direction' => $_POST['voteType'], 'comment_id' => $_POST['postId']));
        }
        else {
            echo json_encode(array('vote_count' => $_POST['voteType'], 'direction' => $_POST['voteType'], 'comment_id' => $_POST['postId']));
            //$old_vote=get_user_meta(get_current_user_id(),'byc_comment_votes['.$_POST[postId].']',true);
        }
    }    

} else {
    // bad request/hack attempt
    echo 2;
}

我知道不会调用updateIcon函数(应该在post post成功时调用)。我一直在使用chrome调试器。我知道执行进入了vote_comment函数,从那里执行就死了(不知道为什么)。我没有收到任何控制台错误。

我意识到这个问题可能过于简单或不清楚。我提前道歉,我是新手(网络开发)。如果需要任何其他信息,请告诉我。提前谢谢。

2 个答案:

答案 0 :(得分:3)

第三个参数应该是函数,而不是字符串。这是一个对代码进行最小更改的示例。

function vote_comment(comment_id, direction) {
    $.post('http://localhost/wordpress/wp-content/themes/backyard-cures/backyard_funcs.php', 
        {voteType: direction, postId: comment_id, type: 'comment'}, 
        function(data) { updateIcon(data.vote_count, data.direction, data.comment_id) },
        'json'
    );
}

编辑:添加解析到回调

编辑2:事实证明OP在使用Chrome调试器时遇到问题,我向他发送了这张图片作为指导:http://i.imgur.com/vJyWhYw.png

在查看了ajax请求响应主体后,他能够自己调试问题,结果发现是在PHP中。

答案 1 :(得分:1)

jQuery post期望函数是第3个参数。

function vote_comment(comment_id, direction) {
    $.post('http://localhost/wordpress/wp-content/themes/backyard-cures/backyard_funcs.php',
      {
      voteType: direction,
      postId: comment_id,
      type: 'comment'},
      'updateIcon(vote_count, direction, comment_id)' //the problem is here
      ,'json');
}

您的代码可能看起来像

function vote_comment(comment_id, direction) {
    $.post('http://localhost/wordpress/wp-content/themes/backyard-cures/backyard_funcs.php',
      {
      voteType: direction,
      postId: comment_id,
      type: 'comment'},
       function(data){
              //data is the server response
              updateIcon(data.vote_count, data.direction, data.comment_id);
       },
       'json');
}