2013-02-07 29 views
0

我想創建一個動態的AJAX函數使用PHP和MySQL,但迄今爲止沒有取得成功。其目的是更新數據庫中的記錄,而無需刷新頁面或更改爲其他頁面。jQuery AJAX問題 - 頁面不斷刷新提交和數據沒有發送

在與我有以下的代碼形式的頁面:

// jQuery 

<script type="text/javascript"> 
<?php 

$sql = "SELECT * from pm_schedule"; 
$result = $pdo->query($sql); 

foreach ($result as $row) 
{ 
echo 
"$(document).ready(function() { 
$('#updatebtn".$row['id']."').click(function() { 
$('#result".$row['id']."').show('slow').delay(4000).hide('slow') 
$.post('process.php', $('#updateform".$row['id']."').serialize()) 
});  
return false; 
});"; 
} 
?> 
</script> 

// form 

$sql = "SELECT * from pm_schedule"; 
$result = $pdo->query($sql); 
foreach ($result as $row) 
{ 
echo 
'<form id="updateform'.$row['id'].'"> 
<div class="tbl_header">'.$row['task'].'</div> 

Due Date: 
<script> 
$(function() { 
$("#datepicker'.$row['id'].'").datepicker({ minDate: -0, 
dateFormat: \'dd/mm/yy\', maxDate: new Date(2013, 1,22) }) 
}); 
</script> 
<input type="text" id="datepicker'.$row['id'].'" style="width: 100px; height: 10px;" value="'.$row['duedate'].'" name="duedate"/>&nbsp; 

Status: 
<select style="width: 125px;" name="status"> 
<option>'.$row['status'].'</option> 
<option>----</option> 
<option>Pending</option> 
<option>In Progress</option> 
<option>Complete</option> 
</select> 
&nbsp; 

<input type="hidden" name="id" value="'.$row['id'].'"> 
<input type="submit" id="updatebtn'.$row['id'].'" value="Update" 
style="width: 100px;"/> 
</form> 

<div id="result'.$row['id'].'" style="display: none; color: red"> 
Update successful! 
</div> 
<p>';} 

在頁面負責處理(process.php),我有以下代碼:

<?php 
$name = mysql_real_escape_string($_POST["name"]); 
$status = mysql_real_escape_string($_POST["status"]); 
$id = mysql_real_escape_string($_POST["id"]); 

$sql = "UPDATE pm_schedule SET name=?, status=?, id=? WHERE id=?"; 
$q = $conn->prepare($sql); 
$q->execute(array($name,$status,$id)); 
?> 

我在做什麼錯?

+0

事情有點難以追查,但我不認爲你在做任何事情來防止點擊提交按鈕時的默認表單提交行爲。如果我正在閱讀上述權利,則從您的點擊處理程序返回false將解決您的問題。 – Jerry

+0

Tha的權利,您可以嘗試通過添加「return false;」來禁用發佈表單,或者將您的按鈕類型從「submit」更改爲「button」,因爲您不想發佈表單。 – Shawn

+0

我已經這樣做了,發佈已被禁用,但數據似乎並沒有在數據庫中更新 – methuselah

回答

1

return false是呼籲$(document).ready的功能,而不是在clickHandler,所以我想這會使表單完成後函數clickhandler反正提交。也許移動的聲明上一行:

echo 
"$(document).ready(function() { 
    $('#updatebtn".$row['id']."').click(function() { 
    $('#result".$row['id']."').show('slow').delay(4000).hide('slow'); 
    $.post('process.php', $('#updateform".$row['id']."').serialize()); 
    return false; 
    }); 
});"; 

正如RIPA說,幾;應該是有幫助要麼。

0

地方;在這裏

foreach ($result as $row) 
{ 
    echo 
    "$(document).ready(function() { 
    $('#updatebtn".$row['id']."').click(function() { 
    $('#result".$row['id']."').show('slow').delay(4000).hide('slow'); 
    $.post('process.php', $('#updateform".$row['id']."').serialize()); 
    });  
    return false; 
    });"; 
}