Заполнение выпадающего списка с помощью jQuery getJSON не работает - PullRequest
1 голос
/ 10 сентября 2010

Я пытаюсь отправить переменную с помощью функции jJuery getJSON, но она, похоже, не проходит, я также не уверен, как получить переменную, которую я только что отправил, в ожидающем PHP-файле. через имя, которое я отправил, например, если я отправлю переменную с именем 'test', могу ли я получить ее так, $_POST['test'] с другой стороны? или как именно это будет работать?

Я пытаюсь заполнить выпадающий список, используя метод, описанный ниже, любые советы по улучшению кода будет принята с благодарностью!

Вот что возвращает PHP:

[{"city":"One"},{"city":"Two"},{"city":"Three"},{"city":"Four"}]

JQuery:

//get the cities
$("#province").live('change', function(){
    var test = $('#province').val();
    //alert(test);

    $.getJSON("cities.php", test, function(data){

    //clean out the select list
    $('#city').html('');

        //run the loop to populate the drop down list
        $.each(data, function(i, data) {
            var city = data.city;     

            $('#city').append(
                $('<option></option>').html(city)
            );
        });
    });
});

PHP:

$province = $_POST['test'];

//mySQL query here

$myarray = mysql_fetch_array($query, true);
$string = explode(',', $myarray['cities']);

foreach($string as $key=>$value) {
    $string[$key] = array('city'=>$value);
}

$json = json_encode($string);
echo $json;

Что я мог делать не так?

Спасибо заранее!

1 Ответ

3 голосов
/ 10 сентября 2010

Во-первых, getJSON - это вызов get ajax. Таким образом, вы должны ожидать, что данные, которые вы передаете с помощью getJSON, в конечном итоге получат $_GET и, очевидно, $_REQUEST, но не $_POST. Во-вторых, вы должны передать объект, который описывает карту данных, которая будет отражена в ассоциативном массиве , $_GET.

Итак, ваш код должен читать ...

$.getJSON("cities.php", { test: $('#province').val() }, function (data) {

с этим вы можете получить доступ на стороне PHP как $_GET['test']

Несколько улучшений, которые я могу дать ... (не проверено)

//get the cities
$("#province").live('change', function(){

    $.getJSON("cities.php", { test: $('#province').val() }, function(data){

        if(!data.ok) {
            alert('Error getting cities. Please try again later.');
        }

        var markup = '', len = data.cities.length;

        for(var i = 0; i < len; i++) {
            markup += '<option>' + data.cities[i] + '</option>';
        }

        $('#city').html(markup);

    });

});

и php

$province = $_POST['test'];

//mySQL query here

$myarray = mysql_fetch_array($query, true);
$cities = explode(',', $myarray['cities']);

echo json_encode(array(
    'ok' => true,
    'cities' => cities
));

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...