2015-02-14 2 views
-1

Итак, я делаю вызов Ajax, который сначала проверит, был ли этот идентификатор сообщения уже проголосован.impode breaks Ajax call

В настоящее время я просто работаю над PHP, чтобы сначала получить идентификатор сообщения, если он пуст, установите его или если он не пуст, чтобы добавить идентификатор.

Вопрос: За исключением случаев, когда я использую метод implode или explode, он, похоже, не обращается к javascript. Хотя если бы я должен был обновить страницу, она зарегистрировала голосование.

Это файл PHP. Для user 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") 
      } 
     } 
     }) 

    }) 

}) 
+0

Могу ли я спросить, почему я был остановлен? – jackdh

ответ

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 - это идентификатор страницы, которую нужно добавить, а $postsVotedOn - это тот список, к которому вы хотите добавить.
+0

О, мой господин, недостающее истинное было. Огромное спасибо. – jackdh

+0

Я рад, что смогу помочь. :) То же самое верно (без отступов) для всех метаданных get _ * _. – Kaloyan