将PHP变量从while循环传递给javascript函数

时间:2012-02-12 00:55:01

标签: php javascript jquery ajax

在有人说“尝试搜索”之前,我有 - 我意识到这可能是一个简单的解决方案,但我无法让它发挥作用。这是我第一次进入AJAX - 我对javascript的了解略高于一年级学生......我知道我需要加快速度。

我正在尝试使用AJAX构建嵌套的任务管理器。我正在加入AJAX实现...否则列表工作正常。基本概念应输出如下:

  

目标:Create a nested task list

     
    

里程碑:建立基本设置 - 完成2/11/12

         
      

任务:设计数据库 - 完成2/11/12
      任务:设计php的东西 - 完成2/11/12

    
         

里程碑:Add the finesse

         
      

任务:Include AJAX functioning
      任务:Include CSS

    
  

当您单击该链接时,它会运行我的MySQL更新以显示正在完成的项目。我有三个嵌套的while循环(一个用于目标,一个用于里程碑,一个用于任务)。它们几乎相同。这是嵌套最深的循环:

$query_tasks = mysql_query("SELECT * FROM task WHERE task_gid = '$task_gid' AND task_mid = '$task_mid' AND task_tid IS NOT NULL");
$t_numrows = mysql_num_rows($query_tasks);
if($t_numrows > 0){ 
    while( $get_task = mysql_fetch_array($query_tasks)){
    $task_id = $get_task['task_id'];
    $task_goal = $get_task['task_goal'];
    $task_due = $task_task['task_due'];
        $task_due = date("m/d/Y", $task_due);
    $task_complete = $get_task['task_complete'];
    $task_complete_date = $get_task['task_complete_date']; ?>

以下是我触发查询的链接:

    <a id="link" href="#"><?=$task_goal?> by <?=$task_due?> </a>
    }

这是我的ajax查询:

<script type="text/javascript">
$('#link').click(function(){
$.ajax({
    type: "GET",
    url: "complete.php?id=<?=$task_id?>"
});
return false;
});
</script>

我已经让它为一个链接工作(如果我点击最后一个渲染的链接,它按预期工作 - 但没有其他链接吗)。我已经尝试在头部调用javascript(我的首选方法),并在每次循环通过时调用它(不确定这是一个好主意,但无论如何)。我的想法是在javascript函数中为每个任务使用while循环中的变量。我已经尝试将ajax脚本放入javascript函数并在链接的onClick行为上调用它,但没有运气。想法?

3 个答案:

答案 0 :(得分:4)

这是你应该怎么做的: http://pastebin.com/ZMCzAS5H

通过在链接中设置自定义属性(task_id),您可以稍后在ajax请求中检索它。这样,您将为所有链接使用一个事件绑定器,而不是每个链接使用一个。

答案 1 :(得分:1)

对同一文档中的多个元素使用相同的ID并不是一个好主意; ID应该是唯一的。请改用类,然后尝试

<a class="link" href="#"><?=$task_goal?> by <?=$task_due?> </a>

<script type="text/javascript">
$('.link').click(function(){
$.ajax({
    type: "GET",
    url: "complete.php?id=<?=$task_id?>"
});
return false;
});
</script>

答案 2 :(得分:0)

JavaScript和PHP不进行交互。 PHP是一个“预处理器”,基本上生成HTML(在此上下文中)。您不能在JavaScript中使用PHP变量。周期。

生成HTML时,将task_id添加到锚点

echo "<a class=\"link\" href=\"#\" rel=\"". $task_id ."\">". $task_goal ." by ". $task_due . " </a>";

不使用link的ID,但使用类

然后在jQuery中:

$('.link').click(function(e){
    e.preventDefault(); // use this instead of return false;
    task_id = $(this).attr('rel');
    $.ajax({
        type: "GET",
        url: "complete.php?id="+ task_id 
    });
});

我已经让它为一个链接工作(如果我点击最后一个渲染的链接,它可以按照需要工作 - 但没有其他链接可以)

这可能是因为您已经使用了一个ID作为锚点,并且您只能在页面上使用一次ID。您必须使用class