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

时间:2011-12-31 14:15:20

标签: php jquery ajax json

在任何人说这是这个和那个问题的重复之前,让我向你保证我已经尝试了那里的解决方案,但我失败了。我正在使用this网站提供的解决方案来提出我的解决方案,我相信除了一个错误,我完成了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不是数字,它不会理解它正在接收的数据。例如,如果我注释掉json_encode('1')并在我的成功部分中放入随机html代码而不是数据,我会在浏览器中显示结果。任何人都可以告诉我为什么jquery只识别从PHP回应的数值而不是varchar值。使用jquery 1.4.2。任何帮助赞赏。

修改
我已经管理到了一点,现在我被卡住了。我使用过John的答案,这是我的jquery代码。我只需要拆分数组并将每个元素一次追加到一个变量,如here

这是代码。有人请告诉我如何拆分(数据)。我可以提醒它,但它是逗号分隔的。只需要让各个项目将它们附加到变量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')

3 个答案:

答案 0 :(得分:2)

我会完全跳过JSON:

PHP

echo "<option>$optionValue</option>";

其他一切都应该有用。

答案 1 :(得分:1)

终于明白了。这是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的一部分受到this问题

的启发

答案 2 :(得分:0)

FWIW,为了填充选择列表,我通常使用以下jQuery代码:

  

//从作为对象给出的项目数组中填充选择列表:{   名称:&#39;文字&#39;,价值:&#39;价值&#39; }       function populateSelectList(parent,items){           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是父选择元素的选择器。我将Text属性设置为name,将Value设置为值,但是应该根据ajax调用返回的对象进行更改(例如,假设返回的对象具有Value和Text属性)。

  

populateSelectList($(&#39; #select&#39;)。get(0),$ .map(结果,功能   (结果){return {name:result.Text,value:result.Value}}));