使用jQuery getJSON填充下拉列表不起作用

时间:2010-09-10 11:19:04

标签: php jquery mysql json

我正在尝试使用jQuery的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;

我可能做错了什么?

提前Thanx!

1 个答案:

答案 0 :(得分:3)

首先,getJSON是一个获取 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
));
祝你好运。