0

I'm using AJAX to send a request to another php page where it returns the result of a query. I was calling it through xmlhttprequest to javascript to get the contents of that php page, but since i was mixing presentation logic "e.g. echo blah blah" with actual code logic I wanted to find a way where I could leave the php logic with my query alone, store the result on an array, and through ajax pass it down to my js code to use in a function.

I'm trying to populate a drop down list with the contents of this array. I've tried json encode but I'm not having any luck.

Here's code for the php page requested:

<html>
<head>
</head>
<body>
<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);


$con = mysqli_connect('*******','********','******','****');
if (!$con) {
    die('Could not connect: ' . mysqli_error($con));
}

$j = mysqli_real_escape_string($con, $_GET['j']);

mysqli_select_db($con,"4h");
$sql="SELECT nombreClub FROM club4h WHERE oficinaLoc LIKE '%".$j."%'";
$result = mysqli_query($con,$sql);

while($row = $result->fetch_array()) {
    $response[] = $row;
}

file_put_contents('getnombre.php',json_encode($response));

mysqli_close($con);
?>
</body>
</html>

Here's my js function:

function loadDoc(url, cfunc, sel){
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function(){
        if (xhttp.readyState == 4 && xhttp.status == 200){
            cfunc(xhttp);
        }
    }
    xhttp.open("GET", url +sel, true);
    xhttp.send();
}

function selClub(xhttp) {
    document.getElementById("nombreClub").style.display = "inline";
    var optData = <?php file_get_contents('getnombre.php'); ?>;
    var newClub = document.getElementById("addClub");
    newClub.type = "text";
    document.getElementById("addOption").style.display = "inline";
            $("#addOption").click(function(){
            $("#nombreClub").append('<option value="' + $("#addClub").val() + '">' + $("#addClub").val() + '</option>');
            $("#nombreClub").last().focus;
            });
}

I call it through an onchange event when an user clicks a previous drop down list so this drop down list gets populated with options specific for the previous list. I know how to add the options to the list, I'm just having trouble getting the data from the php page to js without having to do something like this:

$a = mysqli_real_escape_string($con, $_GET['a']);

mysqli_select_db($con,"4h");
$sql="SELECT nombre FROM personal4h WHERE unidadProg LIKE '%".$a."%'";
$result = mysqli_query($con,$sql);

echo '<select name="agenteExt" id="agenteExt">
    <option value="">Seleccione Agente</option>';
while($row = mysqli_fetch_array($result)) {
    echo "<option value =" . $row['nombre'] . ">" . htmlentities($row['nombre']) . "</option>";
}

echo "</select>";
mysqli_close($con);
?>
3
  • Use AJAX, JSON to send dropdown options' array. Commented Nov 4, 2015 at 20:28
  • Would returning the database query results back as a JSON file from PHP be a suitable alternative to creating "getnombre.php" as a buffer? (Noting the file should really be called "getnombre.json") Commented Nov 4, 2015 at 21:27
  • What do you mean @Traktor53? Commented Nov 5, 2015 at 12:41

1 Answer 1

1

I'll attempt to explain how to do this...

PHP Query Page

Query your data and return it as JSON. PHP has a json_encode() function to do this.

// ...your code to query database which should make an array like this
$query_results = array(
    array('agent'=>'Agent 1'),
    array('agent'=>'Agent 2'),
    array('agent'=>'Agent 3')
);

return json_encode($query_results);

HTML Page should have your select

<select name="agenteExt" id="agenteExt"></select>

JavaScript

A function to get data via AJAX

function loadDoc(url, callback){
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function(){
        if (xhttp.readyState == 4 && xhttp.status == 200){
            if( callback ) callback(xhttp)
        }
    }
    xhttp.open("GET", url, true);
    xhttp.send();
}

The function to get the data to fill your html

function fillOptions(){
    loadDoc('your-query-page.php', function(xhttp){

        // parse the JSON data into a JavaScript object
        var data = JSON.parse(xhttp.responseText);

        // get the `<select>` element
        var el = document.getElementById('agenteExt');

        var html = '<option>Make a selection</option>';

        // loop through data and create each `<option>` for the select
        for(i = 0; i < data.length; i++){
            html += '<option value="'+data[i].agent+'">'+data[i].agent+'</option>'
        }

        // update the select with the new options
        el.innerHTML = html;
    }
}
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for your reply. I finally made it work echoing the variable encoded as json from the php page. I don't know why but when i saved the array to the variable like $response = $row it would return a json encoded double array and I could only get the first value out of it iterating with a for loop because it was $response[0][0], the other values would be undefined. I modified it to be $response = $row["nombreClub"]; and then the JSON parse worked and I could iterate for it. Your help is appreciated!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.