2017-05-03 73 views
0

我試圖爲用戶發佈的不同圖像創建一個像按鈕。這是我的html:真的很奇怪的錯誤,當使用jQuery的AJAX和PHP

<a href="#" title="like" class="likes" id="<?php echo $row['id']?>">Like</a> 

這是我的javascript:

<script> 
$(function(){ 
    $(".likes").click(function(){ 

    var postid = $(this).attr("id"); 
    alert(postid); 
     $.ajax({ 
       type:'POST', 
       url:'likes.php', 
       data:'id='+postid, 
       success:function(data){ 
        alert("success"); 
       } 
      }); 

}); 
}); 
</script> 

這是likes.php,用於測試目的,很簡單:

<?php 
require('config.php'); 
$postid=$_POST['id']; 
echo $postid; 
?> 

當我按下按鈕一樣,一個小窗口會正確postid,然後「成功」,這表明ajax是成功的,但是,當我打開likes.php,我得到一個錯誤,說:注意:未定義的索引:id在C:\ XAMPP \ htdocs目錄\ likes.php在線3

我試着添加e.preventDefault()。我嘗試了不同的語法,比如數據:'id ='+ postid,data:{id:postid},data:{'id':postid}等等。我基本上用單引號和雙引號的所有組合進行了實驗。我也嘗試添加數據類型:html和數據類型:文本。每當我收到一條提示「成功」的警告,但是當我打開likes.php時,$ _POST ['id']始終未定義。

有人可以幫我請這個bug花了我很多時間。

更新:我發現即使我輸入了一個完全不存在的url,比如url:「aabbll.php」,當我點擊「like」按鈕後,仍然會看到一個警告「成功」的窗口,爲什麼頁面仍然提醒「成功」,即使AJAX過程顯然不成功?

+0

打開你的意思是把你的本地文件的網址在你的網頁瀏覽器? – Lixus

+0

是的,打開它在我的本地主機 – gravition

回答

3

當您在新的瀏覽器窗口中打開like.php時,您不會發送帖子變量「id」。

顯示錯誤「Notice:Undefined index」,因爲$ _POST數組不包含id字段。

您可以使用名爲postman的Chrome擴展來使用post變量測試終結點。

小費提高代碼可能是包裝在如果isset聲明

if(isset($_POST['id'])){ 
    // this code will only be executed if the post variable is sent to the page 
    $postid=$_POST['id']; 
    // update database 
    echo "Success"; 
}else{ 
    echo "ERROR: No id post variable found"; 
} 

你的JavaScript代碼發送後變量

+0

如果我把if(isset($ _ POST ['id']))並打開likes.php,我將只是得到一個空的頁面,無論我把什麼代碼放在isset語句裏面。我認爲這是因爲$ _POST爲空,但我的ajax代碼似乎是正確的,有什麼我可以做的,以解決這個問題? – gravition

+0

我已經更新了我的回答,以便爲用戶提供更好的回覆 – Benjaco

0

嘗試把var_dump($_POST)看到你真正發佈。

+0

這是var_dump而不是vardump – nicholasnet

+0

是的。我的錯。 – muchar

0

幾個建議。

你的JS可以簡單

<script> 
$(function() { 

    $('.likes').on('click', function() { 

     var postid = $(this).attr('id'); 
     $.post("likes.php", {id: postid}).done(function(data) { 

      alert('Data Loaded: ' + data); 
     }); 
    }); 
}); 

爲PHP

<?php 
if (!isset($_POST['id'])) { 

    /// Do what you want to do in this case. 
} 

$id = $_POST['id']; 

// If using PHP7 
$id = $_POST['id'] ?? null; 

雖然$('.likes')作品儘量避免,因爲它是在大多數情況下,最慢的選擇。