2013-03-17 86 views
11

我想從我的JavaScript代碼傳遞一個變量到服務器端PHP代碼。我知道這必須通過ajax調用來完成,我相信我已經正確地完成了,但是訪問從我的ajax傳入我的php的變量是當我遇到麻煩,因爲我是新來的php。這裏是我的代碼我迄今:通過AJAX將Javascript變量傳遞給PHP

$(document).ready(function() { 

      $(".clickable").click(function() { 
       var userID = $(this).attr('id'); 
       //alert($(this).attr('id')); 
       $.ajax({ 
        type: "POST", 
        url: 'logtime.php', 
        data: "userID=" + userID, 
        success: function(data) 
        { 
         alert("success!"); 
        } 
       }); 
      }); 
     }); 

<?php //logtime.php 
$uid = isset($_POST['userID']); 
//rest of code that uses $uid 
?> 

我想通過我的JavaScript變量「用戶ID」到PHP($用戶ID),但是我已經走了沿路錯誤的地方。謝謝您的幫助!

+1

究竟是什麼問題?你沒有描述你如何知道自己「出錯了」。 – Pointy 2013-03-17 14:22:41

回答

31

這樣的數據傳遞給Ajax調用(http://api.jquery.com/jQuery.ajax/):

data: { userID : userID } 

而在你的PHP這樣做:

if(isset($_POST['userID'])) 
{ 
    $uid = $_POST['userID']; 

    // Do whatever you want with the $uid 
} 

isset()功能的目的是檢查wheter給定的變量存在,沒有得到它的價值。

+0

我認爲這正確地確定了實際問題。 – Pointy 2013-03-17 14:25:35

+0

您可以在http://php.net/(例如:http://php.net/isset)找到所有標準函數和類的描述。 – mirrormx 2013-03-17 14:31:53

0

或者,嘗試刪除「數據」,並把網址「logtime.php?用戶ID =」 +用戶id

我喜歡Brian的回答最好,這個答案僅僅是因爲你想使用URL參數語法「數據」,我想證明您可以正確使用該語法的位置。

+0

需要將ajax調用類型從'post'更改爲'get'..在一個可能是他正在嘗試做的休息世界中..根據用戶標識獲取數據,但是如果他試圖發佈數據返回到服務器插入然後發佈是正確的方法,他在做什麼可以正常工作。 – Radiotrib 2013-03-17 14:29:14

1

要測試POST變量是否有一個名爲'userID'的元素,最好使用array_key_exists ..它實際上測試數組鍵的存在,而不是它的值是否已經設置..一個微妙的,可能只有語義差異,但確實提高了可讀性。

而現在你的$ UID被設置爲根據$ __ POST [「用戶ID」]是否設置或不...如果我從記憶回憶你可能想嘗試一個布爾值...

$uid = (array_key_exists('userID', $_POST)?$_POST['userID']:'guest'; 

然後你可以使用一個可識別的「guest」用戶身份和渲染你的代碼更具有可讀性:)

另一點重新isset()函數即使它是不可能在這種情況下適用,這是值得記住,如果你不稍後不想被發現......一個數組元素可以合法地設置爲NULL ......即它可以存在,但尚未填充,這可能是一個有效的,可接受的,和可測試的條件。但是:

a = array('one'=>1, 'two'=>null, 'three'=>3); 
isset(a['one']) == true 
isset(a['two']) == false 

array_key_exists(a['one']) == true 
array_key_exists(a['two']) == true 

Bw確定你知道你想用哪個函數來達到這個目的。

3

由於您沒有使用JSON作爲數據類型,因此您不能訪問該值,因爲您提供的PHP只會是真或假。 isset是一個函數,用於檢查是否存在某個值並且有值,而不是訪問該值。

改變你的PHP是:

$uid = (isset($_POST['userID'])) ? $_POST['userID'] : 0; 

上面一行將檢查是否帖子變量存在。如果確實存在,它會將$uid設置爲等於發佈的值。如果它不存在,那麼它將設置$uid等於0。

在後面的代碼可以查詢$uid價值,並據此做出反應

if($uid==0) { 
    echo 'User ID not found'; 
} 

這將會使你的代碼更易讀,也遵循什麼,我認爲是在PHP中處理數據的最佳實踐。