2012-02-12 54 views
0

在任何人說「嘗試搜索」之前,我有 - 我意識到這可能是一個簡單的解決方案,但我無法讓它工作。這是我第一次嘗試AJAX - 我的JavaScript知識略高於一年級學生......我知道我需要加快速度。將PHP變量從while循環傳遞到javascript函數

我試圖建立一個嵌套的任務管理器,使用AJAX。我在AJAX實施中陷入困境......否則,該列表運行良好。基本概念應該是這樣的輸出:

目標:Create a nested task list

里程碑:構建基本設置 - 完成12年2月11日

任務:設計數據庫 - 完成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行爲上調用它,但沒有運氣。思考?

回答

4

這是你應該怎麼做: http://pastebin.com/ZMCzAS5H

通過設置自定義屬性(TASK_ID)到您的鏈接,你就可以在Ajax請求以後檢索。這樣,您將爲所有鏈接使用一個事件綁定器,而不是每個鏈接使用一個。

+0

感謝您的回覆。這是非常有意義的,似乎正是我所期待的。不幸的是,它沒有做ajax部分...... 源正在爲每個鏈接提取task_id。 – thebarless 2012-02-12 01:49:21

+0

嗯..我會看看 – tftd 2012-02-12 02:07:00

+0

該代碼似乎工作正常 - http://tmp.itnews-bg.com/thebarless/index.php;當你點擊一個鏈接時,它向http://tmp.itnews-bg.com/thebarless/complete.php?id=X發送一個請求,其中X是該鏈接的task_id。這裏是源http://tmp.itnews-bg.com/thebarless/index.phps – tftd 2012-02-12 02:15:52

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

這實際上不會按要求工作 - 它將在您點擊的所有鏈接上使用相同的$ task_id。 – tftd 2012-02-12 01:11:18

+0

我得到和以前一樣的結果 - 只能在最後一項任務中成功。 – thebarless 2012-02-12 01:34:19

0

JavaScript和PHP沒有互動。 PHP是一個「預處理器」,基本上生成HTML(在這種情況下)。你不能在JavaScript中使用PHP變量。期。

當生成HTML中,TASK_ID添加到錨

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

不使用的ID爲link,但使用一個類

然後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

+0

JavaScript不直接與PHP交互。但是,如果你有一個正在執行的* .php文件,他發佈的代碼將起作用。他很可能知道;) – tftd 2012-02-12 01:16:28

+0

最有可能?我不這麼認爲。 – Richard 2012-02-12 01:18:07

+0

更新了我的答案。 – Richard 2012-02-12 01:21:55

相關問題