Tengo un enlace html, aquí está (interpretación post 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>

Aquí está la función que está llamando:

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');
}

Aquí está la 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;
}

Sé que no se llama a la función updateIcon (que se supone que se llamará después del éxito). He estado usando el depurador de cromo. Sé que la ejecución ingresa a la función vote_comentario y desde allí la ejecución simplemente muere (no estoy seguro de por qué). No recibo ningún error de consola.

Me doy cuenta de que esta pregunta puede ser simplista o poco clara. Pido disculpas de antemano, soy nuevo en esto (desarrollo web). Avíseme si necesita información adicional. Gracias por adelantado.

0
bob 5 sep. 2014 a las 01:43

2 respuestas

La mejor respuesta

El tercer parámetro debe ser una función, no una cadena. Aquí hay un ejemplo con cambios mínimos en su código.

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'
    );
}

Editar: análisis agregado a la devolución de llamada

Edición 2: Resulta que el OP tenía problemas para usar el depurador de cromo, le envié esta imagen como guía: http: / /i.imgur.com/vJyWhYw.png

Después de ver el cuerpo de respuesta de solicitud de ajax, pudo depurar el problema por su cuenta, que resultó estar en PHP.

3
Drew Faubion 5 sep. 2014 a las 00:07

JQuery post espera que una función sea el tercer parámetro.

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');
}

Su código probablemente debería verse algo así

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');
}
1
andrew 4 sep. 2014 a las 21:53