内爆打破Ajax调用

时间:2015-02-14 20:43:30

标签: javascript php jquery ajax wordpress

所以我正在进行Ajax调用,首先会检查该帖子ID是否已经投票。

目前我正在研究PHP以首先获取帖子ID,如果它是空的设置它或者如果它不是空的来附加ID。

问题:除非我使用implode或explode方法,否则它似乎无法回调javascript。虽然如果我要更新页面,它会注册投票。

这是PHP文件。对于user Id,我只是将其设置为我的管理员ID以开始。

function my_user_vote() {

    $user_id = 1;
    $pageVoted = $_REQUEST["post_id"];

    $currentPosts = get_user_meta($user_id, 'pages_voted_on');

    if (empty($currentPosts)) {
        // Empty create single array
        $postsVotedOn[] = $pageVoted;
    } else {
        $postsVotedOn = explode('|', $currentPosts);
        $postsVotedOn[] = $pageVoted;
    }
    $boo = implode("|", $pageVoted);

    update_user_meta( $user_id, 'pages_voted_on', $boo);


   if ( !wp_verify_nonce( $_REQUEST['nonce'], "my_user_vote_nonce")) {
      exit("No naughty business please");
   }   

   $vote_count = get_post_meta($_REQUEST["post_id"], "votes", true);
   $vote_count = ($vote_count == '') ? 0 : $vote_count;
   $new_vote_count = $vote_count + 1;

   $vote = update_post_meta($_REQUEST["post_id"], "votes", $new_vote_count);

   if($vote === false) {
      $result['type'] = "error";
      $result['vote_count'] = $vote_count;
   }
   else {
      $result['type'] = "success";
      $result['vote_count'] = $new_vote_count;
   }

   if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
      $result = json_encode($result);
      echo $result;
   }
   else {
      header("Location: ".$_SERVER["HTTP_REFERER"]);
   }


   die();

}

这是javascript。

jQuery(document).ready( function() {

   jQuery(".user_vote").click( function() {
      post_id = jQuery(this).attr("data-post_id")
      nonce = jQuery(this).attr("data-nonce")

      jQuery.ajax({
         type : "post",
         dataType : "json",
         url : myAjax.ajaxurl,
         data : {action: "my_user_vote", post_id : post_id, nonce: nonce},
         success: function(response) {
            if(response.type == "success") {
               jQuery(".vote_counter").html("Votes: " + response.vote_count);

               jQuery(".voteUpButton").html('<div class="button btnGreen">Thank you!</div>');
               alert("Cooommmon");
               console.log(response.vote_count);
            }
            else {
               alert("Your vote could not be added")
            }
         }
      })   

   })

})

1 个答案:

答案 0 :(得分:1)

我刚刚对您的代码进行了快速测试,发现了一些引发错误的问题:

1。这一行:

$currentPosts = get_user_meta($user_id, 'pages_voted_on');

应该是

$currentPosts = get_user_meta($user_id, 'pages_voted_on', true);

2。我相信这一行:

$boo = implode("|", $pageVoted);

应该是

$boo = implode("|", $postsVotedOn);

说明:

  1. 没有true参数get_user_meta返回一个数组。你不能explode一个阵列。 http://codex.wordpress.org/Function_Reference/get_user_meta
  2. $pageVoted是要添加的页面的ID,而$postsVotedOn是您希望将其附加到的实际列表。