通过 ajax 将 Javascript 变量传递给 PHP

Posted

技术标签:

【中文标题】通过 ajax 将 Javascript 变量传递给 PHP【英文标题】:Pass Javascript variable to PHP via ajax 【发布时间】:2013-03-05 21:38:36 【问题描述】:

我正在尝试将一个变量从我的 javascript 代码传递到服务器端 php 代码。我知道这必须通过我相信我已经正确完成的ajax调用来完成,但是访问我从我的ajax传递到我的php的变量是当我遇到麻烦时,因为我是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 变量“userID”传递给 php ($userID),但是我在路上的某个地方出错了。感谢您的帮助!

【问题讨论】:

到底是什么问题?你没有描述你是如何知道自己“出错”的。 【参考方案1】:
$(document).ready(function() 
            $(".clickable").click(function() 
                var userID = $(this).attr('id'); // you can add here your personal ID
                //alert($(this).attr('id'));
                $.ajax(
                    type: "POST",
                    url: 'logtime.php',
                    data : 
                        action : 'my_action',
                        userID : userID 
                    ,
                    success: function(data)
                    
                        alert("success!");
                        console.log(data);
                    
                );
            );
        );


 $uid = (isset($_POST['userID'])) ? $_POST['userID'] : 'ID not found';
 echo $uid;

$uid添加你的函数

注意:如果不支持 $,则在 $ 定义的地方添加 jQuery

【讨论】:

【参考方案2】:

将这样的数据传递给 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() 函数的目的是检查给定变量是否存在,而不是获取它的值。

【讨论】:

您可以在:php.net(例如:php.net/isset)找到所有标准函数和类的描述。【参考方案3】:

要测试 POST 变量是否有一个名为 'userID' 的元素,最好使用 array_key_exists .. 它实际上测试数组键的存在而不是其值是否已设置 .. 一个微妙且可能唯一的语义区别,但它确实提高了可读性。

现在您的 $uid 被设置为布尔值,具体取决于是否设置了 $__POST['userID'] ...如果我记得您可能想尝试...

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

然后您可以使用可识别的“来宾”用户并使您的代码更具可读性:)

另一点 reisset() 即使它不太可能适用于这种情况,但如果你不想以后被抓到,还是值得记住的……数组元素可以合法地设置为 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 确定您知道要为哪个目的使用哪个功能。

【讨论】:

【参考方案4】:

由于您没有使用 JSON 作为 AJAX 调用的数据类型,因此我假设您无法访问该值,因为您提供的 PHP 只会是真或假。 isset 是一个检查某物是否存在并具有值的函数,而不是访问该值。

将您的 PHP 更改为:

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

上面的行将检查 post 变量是否存在。如果确实存在,它将设置$uid 等于发布的值。如果不存在则将$uid设置为0。

稍后在您的代码中,您可以检查 $uid 的值并做出相应的反应

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

这将使您的代码更具可读性,并遵循我认为在 PHP 中处理数据的最佳实践。

【讨论】:

【参考方案5】:

或者,尝试删除“数据”并将 URL 设为“logtime.php?userID="+userId

我更喜欢 Brian 的答案,这个答案只是因为您尝试在“数据”中使用 URL 参数语法,我想演示在哪里可以正确使用该语法。

【讨论】:

这将需要将 ajax 调用类型从 'post' 更改为 'get' ......但是如果他试图将数据发布回服务器以进行插入,那么发布是正确的方法,他正在做的事情将正常工作。

以上是关于通过 ajax 将 Javascript 变量传递给 PHP的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 使用 AJAX 将 Javascript 变量传递给 PHP 并检索那些

如何将 JavaScript 变量传递给 jQuery ajax 请求

如何使用 Javascript 和 Ajax 将 HTML 单选按钮值传递给 PHP 变量?

如何将javascript变量传递给数据库

在ajax中取消设置通过post传递的变量

如何使用 AJAX 请求将用户在类变量中的 HTML5 位置从 JavaScript 传递到 Rails 控制器?