使用AJAX调用PHP文件,通过JSON返回数据库结果并填充选择框

使用AJAX调用PHP文件,通过JSON返回数据库结果并填充选择框,php,ajax,json,dynamic,drop-down-menu,Php,Ajax,Json,Dynamic,Drop Down Menu,我目前是一名学生,所以请认识到我的技能是非常新的(对于所有HTML、CSS、Javascript、PHP等,实际上只有几个月的时间)。我正在为一个PHP课程做一个学校项目,我想做的一些事情超出了我迄今所学的范围(JSON和AJAX对我来说是全新的)。这将是我在这个网站上的第一篇帖子,尽管在过去的几个月里我经常使用它作为参考 我的目标是创建一个网站,其中包含一个下拉框(选择框),其中包含来自MySQLi数据库表“make”的汽车制造商。一旦您选择了一辆汽车“make”,则第二个下拉框应处于启用状态

我目前是一名学生,所以请认识到我的技能是非常新的(对于所有HTML、CSS、Javascript、PHP等,实际上只有几个月的时间)。我正在为一个PHP课程做一个学校项目,我想做的一些事情超出了我迄今所学的范围(JSON和AJAX对我来说是全新的)。这将是我在这个网站上的第一篇帖子,尽管在过去的几个月里我经常使用它作为参考

我的目标是创建一个网站,其中包含一个下拉框(选择框),其中包含来自MySQLi数据库表“make”的汽车制造商。一旦您选择了一辆汽车“make”,则第二个下拉框应处于启用状态,并仅填充所选制造商的相关型号。此模型信息来自同一数据库中名为“model”的另一个表

“make”表的结构如下:

插入
make
id
code
title
)值 (1,“ACURA”、“ACURA”), (2,“阿尔法”,“阿尔法·罗密欧”), (3,“资产管理公司”、“资产管理公司”), (4,“阿斯顿”、“阿斯顿马丁”), (5,“奥迪”、“奥迪”), (6,“AVANTI”、“AVANTI”), (7,“BENTL”、“Bentley”), (8"宝马","宝马",, (9,“别克”、“别克”), (10"CAD","Cadillac",, (11、‘雪佛兰’、‘雪佛兰’), (12,“CHRY”、“Chrysler”), (13,“大宇”、“大宇”), 等

“模型”表如下所示:

插入
型号
id
make\u id
code
title
)值 (1,1,'CL_模型','CL模型(4)', (2,1,'2.2CL','-2.2CL'), (3,1,'2.3CL','-2.3CL'), (4,1,'3.0CL','-3.0CL'), (5,1,'3.2CL','-3.2CL'), (6,1,'ILX','ILX'), (7,1,'INTEG','Integra'), (8,1,'图例','图例'), (9,1,'MDX','MDX'), (10,1,'NSX','NSX'), (11,1,'RDX','RDX'), (12,1,'RL_车型','RL车型(2)', (13,1,'3.5RL','-3.5RL'), (14,1,'RL','-RL'), (15,1,'RSX','RSX'), (16,1,'SLX','SLX'), (17,1,“TL_模型”,“TL模型(3)”, 等

我有填充数据库表“make”中的第一个dropbox的代码。一旦从dropbox(onchange事件)中选择make,它似乎正在调用我的javascript函数ok,因为我可以提醒make,它显示ok。在那之后它就不起作用了。我不确定它是否正确调用了我的php代码,php是否工作正常等等。请查看并让我知道您的想法

下面是我的两个Dropbox的HTML和Javascript函数:


函数getModel(carMake)
{
var-xmlhttp;
var-getRequest;
警报(carMake);//此警报正在工作并显示汽车品牌!
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
var carModels=JSON.parse(xmlhttp.responseText.split)(“”);
警报(carModels.toString());
var carModelsHTML=“”;
对于(i=0;i”;
}
警报(carModelsHTML);
document.getElementById(“车辆型号”).disabled=false;
document.getElementById(“AjaxDiv”).innerHTML=carModelsHTML;
}
}
getRequest=“myAjax.php?make=“+carMake;
open(“GET”,getRequest,true);
xmlhttp.send();
}
车辆品牌:

我真的建议你先研究一下:


我想你会学得很好,学到更多。

有了Jonathan提供的调试思想,我取得了一些进展,并最终使它工作起来。请注意,有相当多的改变做了代码从原来的文章,但希望这将有助于其他人可能会陷入类似的问题或来自这篇文章

下面是现在的Javascript和HTML:


函数getModel(carMake)
{
var-xmlhttp;
var-getRequest;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
var carModels=xmlhttp.responseText.split(“,”);//接收一个长字符串中的汽车模型,每个模型用“,”分隔,并将其拆分为一个数组
//下面的代码部分抓取当前的“model”下拉框并找到长度,然后将所有选项置空。
var currentOptions=document.getElementById(“车辆模型”);
对于(i=currentOptions.options.length-1;i>=0;i--)
{
当前选项。删除(i);
}
//下面介绍刚刚从数据库返回的所有模型选项,并再次填充“model”下拉框。
对于(i=0;i
车辆品牌:

你真的需要缩小问题的范围。巨大的代码墙使得有人能够帮助你的可能性大大降低。对不起,我有一个习惯,就是有点详细和冗长。不幸的是,由于不知道问题在哪里,并且在尝试了我知道的有限调试后被卡住,我在这里发布了所有相关的代码并试图获得帮助。谢谢你的评论,我已经在这里了。我从头到尾都学习了关于ajax的w3schools“课程”,大部分php也已经学习过了。我也有烧焦