用PHP和AJAX实现链表
我在用HTML制作链接列表时遇到问题,让我解释一下: 在HTML中,我有两个选择:用PHP和AJAX实现链表,php,html,ajax,Php,Html,Ajax,我在用HTML制作链接列表时遇到问题,让我解释一下: 在HTML中,我有两个选择: <!-- This select WORKS and read the opened projects from de database --> <select name="project" id="project"> <option value="0">Select a project</option>
<!-- This select WORKS and read the opened projects from de database -->
<select name="project" id="project">
<option value="0">Select a project</option>
<?php if (isset($result2)): ?>
<?php foreach ($result2 as $res): ?>
<option value=<?php echo $res['c_project_id'] ?>><?php echo $res['d_name'] ?></option>
<?php endforeach ?>
<?php endif ?>
</select>
<!-- This doesn't work, but I want: When I select a project, the project's categories go here -->
<select name="category" id="category">
</select>
表格类别(与表格项目相关)
我在html中有一个SELECT,它采用项目名称和ID,它在SELECT nº1中工作
$statement2 = $conexion->prepare("SELECT c_project_id, d_name FROM project WHERE d_state= 'Open'");
$statement2->execute();
$resultado2 = $statement2->fetchAll();
现在我想:当我在第一个选择中“单击”时,第二个选择会做出声明并完成第二个选择。对于测试,我只编写了一个简单的选项。我尝试使用AJAX和PHP,但第二个选项为空:
阿贾克斯:
$( "#project" ).change(function() {
var select = $( "#project option:selected" ).val();
console.log(select); //just for testing that I took the value.
$.ajax({
type: "POST",
url: "phpPage.php",
data: { selectedProject : select }
}).done(function(data){
console.log("Done");
$("#category").html(data);
});
});
和PHP:
if(isset($_POST["selectedProject"])){
$proy = $_POST["selectedProject"];
$output = "<option value='100'> Select your category </option>";
if($proy != 0){
$output.= "<option>" . $proy . "</option>";
}
echo $output;
}
if(设置($\u POST[“selectedProject”])){
$proy=$\u POST[“selectedProject”];
$output=“选择您的类别”;
如果($proy!=0){
$output.=''.$proy.'';
}
echo$输出;
}
但这一回我一无所获,一切都是空的
最后,当我尝试调试时,我注意到在一个PHP响应中,HTML代码()被写在页面的开头(在响应中):
选择您的类别1
...
很抱歉问了这么大的问题,但我在这上面浪费了很多时间,我不知道会发生什么。
谢谢你 让我们看看你所拥有和想要做的事情的分类。首先,您有一个空的
select
元素:
<select name="category" id="category">
// empty
</select>
您的PHP是在输出上创建太多信息的地方。这通常是将“ajax php脚本”与正常的完整html构建php脚本隔离开来的好主意。因此,您只输出特定ajax调用所需的内容
在上述PHP中,您有:
if(isset($_POST["selectedProject"])){
$proy = $_POST["selectedProject"];
$output = "<option value='100'> Select your category </option>";
if($proy != 0){
$output.= "<option>" . $proy . "</option>";
}
echo $output;
}
// you must have more page generation below this based on your Q (?)
由于您只需要
选项
标记的基本html,因此不再需要html。因此,添加一个退出代码>紧接着echo$输出
有关.success
(或success:option)与.done
的更多信息@那完全错了。done()是请求成功时要调用的jQuery Deferred/Promise接口($.ajax()返回一个Deferred对象)的正确方法。毫无疑问,您会想到“success”回调,它是作为对$.ajax()的调用中的一个选项提供的。延迟接口不公开任何名为“success()”的方法。检查文档。。。在写作之前。OP代码的这一特定方面并没有什么问题。不管怎样,关于你的问题…“你能解释一下原因吗?”见最近发布的难以置信的答案。您使用相同的PHP脚本来输出ajax调用和主页所需的位。把它们混在一起通常是一个糟糕的设计,但是如果你小心的话,你可以做到。更改之所以有效,是因为exit停止了脚本的运行,从而停止了脚本的输出,因为它会输出大量其他HTML,这些HTML用于加载主页,而不是作为ajax调用输出的一部分。我倾向于在子目录中填充用于ajax调用的“小脚本”。但有时当我有点懒(或走得太快)时,我会将ajax反应代码放在我正在编写的某个大脚本的尖端附近(只是为了让事情顺利进行)。。。然后,当我把事情搞定时,把上面的一点扯到它自己的档案里。要掌握的主要内容是,ajax通常用于“操纵当前html文档”。。。因此,您只需要使用json数据,或者使用html块来插入/替换部分。非常感谢,我想您已经理解了。太神了
<option value='100'> Select your category </option><option>1</option>
<!DOCTYPE html>
<html lang="es">
<head>
<title>
...
<select name="category" id="category">
// empty
</select>
$("#category").html(data);
if(isset($_POST["selectedProject"])){
$proy = $_POST["selectedProject"];
$output = "<option value='100'> Select your category </option>";
if($proy != 0){
$output.= "<option>" . $proy . "</option>";
}
echo $output;
}
// you must have more page generation below this based on your Q (?)
if(isset($_POST["selectedProject"])){
$proy = $_POST["selectedProject"];
$output = "<option value='100'> Select your category </option>";
if($proy != 0){
$output.= "<option>" . $proy . "</option>";
}
echo $output;
exit; // <-- halt so none of the other following html spills out
}