我仍然习惯使用AJAX并且我很难用它。你能帮助我吗?我实际上有一个下拉列表,当我在该下拉列表中选择一个项目时,一个查询表应该打印到tbody.here是我的代码:
PHP代码:
<select id="proj_id" name="proj_id" onchange="myFunction(this.value)">
<option value="none">---select project---</option>
<?php
//Projects
$r = @mysql_query("SELECT `proj_id`, `proj_name` FROM `projects`");
while($rows = mysql_fetch_assoc($r)) {
$proj_id = $rows['proj_id'];
$proj_name = $rows['proj_name'];
echo '<option value='.$proj_id.'>'.$proj_name.'</option>';
}
?>
</select>
<table>
<thead>
<tr>
<th>Project Name</th>
<th>Material Name</th>
<th>Quantity</th>
<th>Status</th>
</tr>
</thead>
<tbody id="project_estmat">
<?php
//Display Requests
$r = @mysql_query("SELECT `proj_name`, `mat_name`, `req_qty`, `stat_desc` FROM `requests` JOIN `projects` USING(`proj_id`) JOIN `materials` USING(`mat_id`) JOIN `status` ON(requests.stat_id = status.stat_id)");
while ($row = mysql_fetch_array($r)) {
echo '<tr>';
echo '<td>'.$row['proj_name'].'</td>';
echo '<td>'.$row['mat_name'].'</td>';
echo '<td>'.$row['req_qty'].'</td>';
echo '<td>'.$row['stat_desc'].'</td>';
echo '</tr>';
}
?>
</tbody>
</table>
jS代码:
function myFunction(value){
if(value!="none")
{
$.ajax(
{
type: "POST",
url: 'content/admin/requests.php',
data: { proj_id: value},
success: function(data) {
$('#project_estmat').html(data);
}
});
}
else
{
$('#project_estmat').html("select an item");
}
}
我有这个PHP代码应该在#project_estmat中,这是一个表。我认为这就是问题所在。因为每次我选择一个项目时,表格中都不会打印任何内容。它显示空数据。
<?php
if (isset($_POST['proj_id'])) {
$r = @mysql_query("SELECT `proj_name`, `mat_name`, `req_qty`, `stat_desc` FROM `requests` JOIN `projects` USING(`proj_id`) JOIN `materials` USING(`mat_id`) JOIN `status` ON(requests.stat_id = status.stat_id)");
if($r){
while ($row = mysql_fetch_array($r)) {
echo '<tr>';
echo '<td>'.$row['proj_name'].'</td>';
echo '<td>'.$row['mat_name'].'</td>';
echo '<td>'.$row['req_qty'].'</td>';
echo '<td>'.$row['stat_desc'].'</td>';
echo '</tr>';
}
}
exit;
}
?>
答案 0 :(得分:2)
你已经使用${
包装了$ .ajax函数
它应该如下所示,并尝试使用change,并在执行此操作时删除内联函数调用,
$('#proj_id').change(function() {
var value = $(this).val();
if(value!="none"){
$.ajax({
type: "POST",
url: 'content/admin/requests.php',
data: { proj_id: value},
success: function(data) {
$('#project_estmat').html(data);
alert(data);//check whats coming from the server side
}
});
}
});
使用简化的PHP代码测试到服务器端,如下所示,
<?php
if (isset($_POST['proj_id'])) {
echo '<tr>';
echo '<td>A</td>';
echo '<td>B</td>';
echo '<td>C</td>';
echo '<td>D</td>';
echo '</tr>';
}
?>
答案 1 :(得分:0)
一切都很好,除非你的if条件中有额外的'$'
if(value!="none")
${ //here
删除'$'符号应该有效...
答案 2 :(得分:0)
您不应该使用函数mysql_query,因为它自PHP 5.5.0起已弃用,将被删除(http://php.net/manual/en/function.mysql-query.php)。您最好使用PHP PDO类(http://php.net/manual/en/book.pdo.php)。
答案 3 :(得分:0)
请勿使用'@'error_compression运算符来抑制错误。从mysql_query中删除@符号并尝试调试代码。
答案 4 :(得分:-1)
尝试构建字符串并将其发回。
$str = '';
if($r){
while ($row = mysql_fetch_array($r)) {
$str .= '<tr>';
$str .= '<td>'.$row['proj_name'].'</td>';
$str .= '<td>'.$row['mat_name'].'</td>';
$str .= '<td>'.$row['req_qty'].'</td>';
$str .= '<td>'.$row['stat_desc'].'</td>';
$str .= '</tr>';
}
return $str;
}
然后当循环完成后,我们可以发回字符串。虽然dataType
属性.ajax()
使用intelligent parsing
来决定发回的数据类型以及如何构造返回的对象,但您应该声明它。
$.ajax({
type: "POST",
url: 'content/admin/requests.php',
data: { proj_id: value},
dataType:'html',
success: function(data) {
$('#project_estmat').html(data);
}
});