内爆中断 Ajax 调用

implode breaks Ajax call

所以我正在进行 Ajax 调用,它将首先检查 post ID 是否已被投票。

目前我正在处理 PHP 以首先获取 post 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.这一行:

$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 returns 数组。而且你不能 explode 数组。 http://codex.wordpress.org/Function_Reference/get_user_meta
  2. $pageVoted 是要添加的页面的 ID,而 $postsVotedOn 是您要将其附加到的实际列表。