2014-09-04 60 views
0

我有一個HTML鏈接,這裏是(後PHP解釋):問題實現AJAX後

<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功能(這是應該的崗位上取得成功被稱爲)沒有被調用編輯。我一直在使用chrome調試器。我知道執行進入vote_comment函數,並從那裏執行死亡(不知道爲什麼)。我沒有收到任何控制檯錯誤。

我意識到這個問題可能過於簡單或不清楚。我提前道歉,我是這個新手(網站開發)。請讓我知道是否需要任何額外的信息。提前致謝。

+0

如果您查看網絡選項卡,它是否顯示正在發出的請求?如果是這樣,結果如何? – 2014-09-04 21:48:47

+0

您應該從'$ .post'網址中移除'http:// localhost',您可能會遇到跨域問題。 – jeroen 2014-09-04 21:48:55

+1

在成功函數參數中,你有一個字符串''updateIcon(vote_count,direction,comment_id)'',而不是函數定義,比如'function(data){... updateIcon(vote_count,direction,comment_id); }' – developerwjk 2014-09-04 21:52:22

回答

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使用鉻調試器有問題,我給他發了這個形象指導:http://i.imgur.com/vJyWhYw.png

觀看Ajax請求的響應後身體,他能夠調試自己的問題,原來是在PHP中。

+0

嘿,這沒有幫助。和以前一樣的問題。 – bob 2014-09-04 21:56:25

+0

您是否嘗試在點擊時觀看網絡標籤?因爲這真的會幫助我們幫助你。 – 2014-09-04 21:57:15

+0

backyard_funcs。PHP /WordPress的/可溼性粉劑內容/主題/後院固化 POST OK text/html的\t jquery.min.js:4 腳本 660乙 436乙 19毫秒 19毫秒 – bob 2014-09-04 22:06:17

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

感謝您的回覆。但是,就我所瞭解的你來說,做出這種改變並沒有什麼幫助。你的數據是什麼意思是服務器的迴應?我應該在那裏還是別的什麼地方有「數據」這個詞? – bob 2014-09-04 22:04:31

+0

這個答案假定你的代碼中定義了'updateIcon'函數,比如'function updateIcon(vote_count,direction,comment_id){//用stuff_count,direction,comment_id做東西''你可以用'data'或'response '或者你喜歡的任何東西,但是你需要從服務器收集數據。嘗試'console.log(data)'它說'//數據是服務器響應'然後檢查你的控制檯。你會明白我的意思 – andrew 2014-09-04 22:08:53