2013-03-17 172 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中处理数据的最佳实践。