Php 通过Ajax Jquery填充选择列表菜单
在任何人说这是一个重复的这个和那个问题之前,让我向你保证,我已经尝试了那里的解决方案,但我失败了。我正在使用网站上提供的解决方案来提出我的解决方案,我相信除了一个错误,我已经完成了90%。我想显示所有代码的列表,这些代码具有与它们相关联的某个公共ID 下面是我用来获取代码列表的PHP代码Php 通过Ajax Jquery填充选择列表菜单,php,jquery,ajax,json,Php,Jquery,Ajax,Json,在任何人说这是一个重复的这个和那个问题之前,让我向你保证,我已经尝试了那里的解决方案,但我失败了。我正在使用网站上提供的解决方案来提出我的解决方案,我相信除了一个错误,我已经完成了90%。我想显示所有代码的列表,这些代码具有与它们相关联的某个公共ID 下面是我用来获取代码列表的PHP代码 <?php $budgetcode=$_POST['budgetcode']; //$budgetcode=2102; $selectcodes="SELECT * FROM tblbudget_cod
<?php
$budgetcode=$_POST['budgetcode'];
//$budgetcode=2102;
$selectcodes="SELECT * FROM tblbudget_codes WHERE T1 = $budgetcode";
$query=$connection->query($selectcodes);
$count=$query->num_rows;
if($count < 1)
{
die('0');
}
else{
while($row=$query->fetch_array()){
$T1=($row['T1']);
$T2=($row['T2']);
$T3=($row['T3']);
$T4=($row['T4']);
$optionValue = $T1."-".$T2."-".$T3."-".$T4;
echo json_encode("<option>$optionValue</option");
// echo json_encode('1');
}
}
?>
下面是我用来获取代码的ajax调用
$.post("Functions/getbudgetcodes.php",{budgetcode:budgetid},function(data){
if(data!='0')
{
$("#budgetcode").html(data).show();
$("#result").html('');
}
else{
$("#result").html('<em>No codes found. Contact Administrator</em>');
}
},'json')
//alert(budgetid);
})
这里的问题是,如果jquery接收的数据不是数字,那么jquery就无法理解它所接收的数据。例如,如果我注释掉json_encode'1'并将随机html代码而不是数据放入成功部分,我会在浏览器中显示结果。有人能告诉我为什么jquery只识别从PHP返回的数值,而不识别varchar值吗。使用jquery1.4.2。谢谢你的帮助
编辑
我已经达到了某种程度,现在我被卡住了。我使用了John的答案,这是我的jquery代码。我只需要拆分数组并将每个元素一次附加到一个变量中,就像
这是代码。有人告诉我如何分割数据。我可以提醒它,但它是逗号分隔的。只需要将单个项目附加到变量html中,然后显示它
$.post("Functions/getbudgetcodes.php",{budgetcode:budgetid},function(data){
if(!$.isEmptyObject(data))
{
//alert (data);
// alert(split (data))
var html = '';
var len = data.length;
for (var i = 0; i< len; i++) {
html += '<option>' +data+ '</option>';
}
$("#budgetcode").html(html).show();
$("#result").html('');
}
else{
$("#result").html('<em>No codes found. Contact Administrator</em>');
}
},'json')
我将完全跳过JSON: PHP
其他的一切都应该是可行的。终于明白了。下面是php代码
$selectcodes="SELECT * FROM tblbudget_codes WHERE T1 = $budgetcode";
$query=$connection->query($selectcodes);
$count=$query->num_rows;
if($count < 1)
{
die('0');
}
else{
while($row=$query->fetch_array()){
$data[] = $row;
}
echo json_encode($data);
}
?>
这是jquery代码
$.post("Functions/getbudgetcodes.php",{budgetcode:budgetid},function(data){
if(!$.isEmptyObject(data))
{
//alert (data);
var html = '';
var joiner='';
var len = data.length;
for (var i = 0; i< len; i++) {
joiner=([data[i].T1,data[i].T2,data[i].T3, data[i].T4].join('-'));
//alert(joiner);
html += '<option>'+joiner+'</option>';
}
$("#budgetcode").html(html).show();
$("#result").html('');
}
else{
$("#result").html('<em>No codes found. Contact Administrator</em>');
}
},'json')
必须使用“连接”来使用破折号连接多个代码。希望这有帮助。PHP部分和jquery部分的灵感来源于问题FWIW,为了填充选择列表,我通常使用以下jquery代码: //从作为对象给定的项目数组中填充选择列表:{ 名称:“文本”,值:“值”} 函数populateSelectListparent,项{ parent.options.length=0
if (parent.options.length === 0) {
parent.options[0] = new Option("Please select something...", "");
}
$.each(items, function (i) {
if (typeof (this) == 'undefined') { return; }
parent.options[el.options.length] = new Option(this.name, this.value);
});
}
为了调用上述函数,我使用map方法传递ajax调用的结果,其中select是父select元素的选择器。我将Text属性设置为name,将Value设置为Value,但这应该根据ajax调用返回的对象而改变,例如,假设返回的对象具有值和Text pr不动产
populateSelectList$'select'.get0,$.mapresults,函数
结果{返回{名称:result.Text,值:result.value}
您对什么是JSON编码有一些误解。像这样单独编码HTML选项标记是没有意义的。JSON用于将数据结构序列化为可解析的字符串形式。此外,一旦您实际将JSON返回到使用$.post启动的请求,您就必须显式调用$.parseJSON来解析反序列化e它。这里存在明显的SQL注入风险。在将$budgetcode变量传递到SQL查询字符串之前,请正确转义它。@Max,您还忘了关闭标记。@FrostyZ谢谢。将对其进行清理。具体操作方法是什么?我应该删除“json”吗?我有不同的代码,其中一些代码共享一个ID。我有一个显示这些ID的选择列表菜单nd根据选择的代码,我想用代码填充budgetcode select菜单,这些代码共享以前选择的ID。实际上,这是一个正确的答案,您只是解释得不够详细。
if (parent.options.length === 0) {
parent.options[0] = new Option("Please select something...", "");
}
$.each(items, function (i) {
if (typeof (this) == 'undefined') { return; }
parent.options[el.options.length] = new Option(this.name, this.value);
});
}