通过AJAX将会话变量传递到PHP文件

3
我的目标是通过一个ajax语句将包含会话变量的$userId变量传递到包含已回显表单的php文件中。目的是当表单提交时,会话变量可以插入到数据库中并用作识别哪些用户完成了哪些条目的方式。
我遇到了一些问题,无法使变量数据传递到ajax语句中。我做错了什么?
<?php

session_start();

if(isset($_SESSION['userid'])) {

    $userId = mysql_real_escape_string($_SESSION['userid']);

    echo $userId;

    echo ' (irrelevant code)...

        //button that loads form via ajax...
        <a href="#" class="small button radius expand" onClick="showAdd(\'$userId\');return false;">Add URL</a>

    (irrelevant code)... ';
}

AJAX代码:

function showAdd(str)   {
     $('#response').html('Processing Request. Please wait a moment...');
       var userId = str;
       alert (userId);

       $.ajax({
           type: "POST",
           url: "addUrlForm.php",   
           data: "userId=" + str,                                        
           success: function(msg)   {
               $('#response').empty();
               $('#content01').html(msg).show();
           },
           error: function () {
               alert('error');
        }   
    });
};

编辑:我采纳了你的建议(谢谢),它有所帮助。现在警报以字符串形式返回"$userId"变量。如何使其被识别为包含会话数据的变量,而不是字符串?我尝试过 "showAdd($userId)",但控制台告诉我$userId未定义?


1
既然您将userId作为参数发送到showAdd()函数中,那么代码不应该是var userId = str;吗?或者只需将参数名称更改为userId,您就可以愉快地继续了。 - Cyclonecode
如果它对你有帮助,也许你应该投票支持下面的答案。 - Cyclonecode
2个回答

1

由于您将userId作为参数发送到showAdd()函数,因此您应该更改代码如下:

function showAdd(str) {
   var userId = str;
   // ...
}

或者简单地将参数重命名为userId:
function showAdd(userId) {
    // use userId here
]

为了使您的代码发送正确的userId,而不是字符串$userId,您应该将输出字符串用双引号括起来或直接输出:
echo '<a href="#" class="small button radius expand" onClick="showAdd('.$userId.');return false;">Add URL</a>';

或者:

echo "<a href='#' class='small button radius expand' onClick='showAdd($userId);return false;'>Add URL</a>";

谢谢Krister,我刚刚尝试了(".$userId."),用了双引号后出现了语法错误,以为完全错了哈哈。 - Corey

0

我不明白为什么在函数参数中已经有userid的情况下,还要使用$(this)

将此更改为:

var userId = $(this).attr('userId');

To:

var userId = str;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接