Php 通过Ajax Jquery填充选择列表菜单

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

在任何人说这是一个重复的这个和那个问题之前,让我向你保证,我已经尝试了那里的解决方案,但我失败了。我正在使用网站上提供的解决方案来提出我的解决方案,我相信除了一个错误,我已经完成了90%。我想显示所有代码的列表,这些代码具有与它们相关联的某个公共ID

下面是我用来获取代码列表的PHP代码

<?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);
    });
}