2012-01-22 73 views
0

今天我試圖在我的javascript代碼中啓動onclick這個php mysql語句。然而,這個php語句似乎在頁面加載時運行,不等到onlclick事件。有什麼辦法可以解決這個問題嗎?我知道我可以使用JavaScript來打開其他頁面,然後回調php語句,但我希望這是輕量級的。 謝謝!在javascript中回聲mysql語句

<script type="text/javascript"> 
    function exitchatfriend() { 
    document.getElementById("clicktoenteraconversation<?php 
        echo $otherchatuser ?>").style.display='none'; 
    document.getElementById("chatcontainer").style.display='none'; 
    <?php mysql_query("DELETE FROM currentconversation 
      WHERE username='$username' and otherchatuser='$otherchatuser'"); ?> 
    } 
    </script> 

回答

3

您對PHP和javascript的相對角色有一個基本的誤解。 PHP是服務器端在頁面發送給客戶端之前總是執行的。這意味着代碼永遠不會發送給客戶端,只有結果。所以,如果我有:

<?php echo "1+1 is ".(1+1); ?> 

發送到客戶端的源代碼是

1+1 is 2 

的Javascript,而另一方面,在客戶的身邊執行。代碼被髮送到用戶的計算機,並且您希望(希望)用戶的瀏覽器正確解釋代碼並執行所要求的內容。 (這就是爲什麼javascript不能用於驗證等等,因爲你無法控制客戶端用你發送的代碼做什麼)。

如果你想要一個onclick事件來運行一個PHP腳本,你必須使用AJAX(這基本上只是JavaScript在後臺執行新的頁面加載,並對結果進行一些處理)。但是,Ajax並不是超快速(你不想跑

for(i=0;i<10000;i++){ 
    //some ajax call 
} 

,你不能依賴它(所以如果它是此查詢獲取運行超級重要的:

mysql_query("DELETE FROM currentconversation WHERE username='$username' and otherchatuser='$otherchatuser'"); 

你將要尋找結束會話的其他方式。

+0

謝謝,這使得事情畝ch更清楚。 – Eggo

0
<script type="text/javascript"> 
function exitchatfriend() { 
document.getElementById('clicktoenteraconversation'+ id_of_otherchatuser).style.display='none'; 
document.getElementById("chatcontainer").style.display='none'; 
//A Jquery AJAX Call 

var url = "YOUR_SITE_URL/ajax/deleteUser.php"; 

$.post(url,{" id_of_otherchatuser": id_of_otherchatuser ,"username":username},function(res){ 
    if(res) 
     { 
     alert('deleted') 
     } 
     }); 
} 


} 
</script> 



//on the server side /ajax/deleteUser.php 
<?php 
$otherchatuser=$POST['id_of_otherchatuser']; 
$username=$POST['username']; 

    if(mysql_query("DELETE FROM currentconversation WHERE username='$username' and otherchatuser='$otherchatuser'")) 
    { 
    return true; 
    } 
    ?> 

只給概念上的想法。