Maxi
Maxi

Reputation: 743

Populate Select list Menu though Ajax Jquery

Before anybody says this is a duplicate of this and that question, let me assure you I have tried the solutions there and I have failed. I am using a solution offered in this website to come up with my solution and I believe I am 90% done except for one error. I want to display a list of all codes that have a certain common ID associated with them.

Here is my PHP code that I am using to get a list of codes

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

    }
 ?>

Here is the ajax call i am using to fetch the codes

$.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);

    })

The problem here is that jquery does not understand the data it is receiving if it is not numeric. E.g if I comment out the json_encode('1') and put random html code instead of data in my success part, I get results displayed in my browser. Can anybody tell me why jquery is only recognizing numeric values that are being echoed from PHP and not varchar values. Using jquery 1.4.2. Any help appreciated.

EDIT
I have managed upto some point and now i am stuck. I have used John's Answer and here is my jquery code. i just need to split the array and append each element to a variable one at a time like here

here is the code. Somebody please tell how I split (data). i can alert it but it is comma seperated. Just need to get the individual items append them to variable html and then display it.

$.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')

Upvotes: 1

Views: 1870

Answers (3)

Orry
Orry

Reputation: 2648

FWIW, for populating select lists I usually use the following jQuery code:

// populates select list from array of items given as objects: { name: 'text', value: 'value' } 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);
    });
}

and to call the above function i pass the results of an ajax call using the map method where #select is the selector for the parent select element. I am setting the Text property to the name and Value to the value but that should change according to the objects returned by the ajax call (e.g. assuming the returned objects have a Value and Text properties).

populateSelectList($('#select').get(0), $.map(results, function (result) { return { name: result.Text, value: result.Value} }));

Upvotes: 0

Maxi
Maxi

Reputation: 743

Finally figured it out. Here is the php code

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

Here is the jquery code

$.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')

Had to use join to join the multiple codes using a dash. Hope this helps. The PHP part and part of the jquery was inspired by this question

Upvotes: 1

Ayman Safadi
Ayman Safadi

Reputation: 11552

I would skip JSON altogether:

PHP

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

Everything else should work.

Upvotes: 2

Related Questions