我试图用AJAX填充两个下拉菜单,这些菜单也链接到MySQL数据库。 下拉列表1 =品牌和下拉列表2 =模型
我唯一的问题是将变量从Dropdown 1传递到另一个页面,以便可以运行MySQL搜索。
这是AJAX功能:
function AjaxFunction()
{
var httpxml;
try
{
// Firefox, Opera 8.0+, Safari
httpxml=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
httpxml=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
httpxml=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
function stateck()
{
if(httpxml.readyState==4)
{
//alert(httpxml.responseText);
var myarray = JSON.parse(httpxml.responseText);
// Remove the options from 2nd dropdown list
for(j=document.testform.model.options.length-1;j>=0;j--)
{
document.testform.model.remove(j);
}
for (i=0;i<myarray.data.length;i++)
{
var optn = document.createElement("OPTION");
optn.text = myarray.data[i].ModelName;
optn.value = myarray.data[i].ModelName; // You can change this to subcategory
document.testform.model.options.add(optn);
}
}
} // end of function stateck
var url="dd.php";
var cat_id=document.getElementById('s1').value;
url=url+"?cat_id="+cat_id;
url=url+"&sid="+Math.random();
httpxml.onreadystatechange=stateck;
//alert(url);
httpxml.open("GET",url,true);
httpxml.send(null);
}
</script>
这是相关表格的代码。这适用于生成第一个字段。
<form name="testform" method='POST' action='mainck.php'>
Name:<input type=text name=fname>
<?php
echo "<br>Select Brand <select name='brand' id='s1' onchange=AjaxFunction();>
<option value=''>Select One</option>";
$sql="SELECT DISTINCT Id, BrandName FROM tbl_brands order by BrandName"; // Query to collect data from table
foreach ($dbo->query($sql) as $row) {
echo "<option value=$row[Id]>$row[BrandName]</option>";
}
?>
</select>
然后它使用一个名为dd.php的页面,它从第一个下拉选择中获取变量,运行MySQL查询,然后将信息输出到第二个drowpdown。
<?php
@$cat_id=$_GET['Id'];
//$cat_id=2;
/// Preventing injection attack ////
if(!is_numeric($cat_id)){
echo "Data Error";
exit;
}
/// end of checking injection attack ////
require "config.php";
$sql="SELECT ModelName FROM tbl_model WHERE tbl_model.Id IN (SELECT DISTINCT ModelId FROM tbl_products WHERE BrandId=$brand)";
$row=$dbo->prepare($sql);
$row->execute();
$result=$row->fetchAll(PDO::FETCH_ASSOC);
$main = array('data'=>$result);
echo json_encode($main);
?>
问题是页面没有得到变量。如果我注释掉@$cat_id=$_GET['Id'];
然后将其替换为$cat_id=2;
的设置变量,那么整个过程就会完美无缺。
问题:正在传递变量。主页面没有将变量发送到我的页面dd.php
答案 0 :(得分:4)
在制作xmlhttp请求时,你的网址是这样的
url=url+"?cat_id="+cat_id;
但是在你的dd.php
中,你试图让$_GET['Id'];
不在那里。
将$_GET['Id'];
替换为$_GET['cat_id'];
。
注意 - 永远不要使用@
来抑制错误。隐藏某些东西并不会使它不存在。也可以在ide / editor中使用linter。
答案 1 :(得分:1)
从您在ajax函数上的网址中我可以看到您将变量发送为 cat_id ,但是您可以在php端将其捕获为 Id
两侧的变量名称必须相同。
尝试$ _GET ['cat_id']而不是$ _GET ['Id']。应该管用。