2015-12-28 67 views
0

我有几个下拉框。我希望第一个选择类别,然后对PHP文件执行AJAX调用,选择适当的子类别数组并将其返回到第二个下拉列表。代码如下:php阵列通过AJAX下拉框

与子类的PHP文件:

$category = $_POST['category']; 

if ($category == "World"){ 
$subcategory = array('Europe' => "Europe", 'North America' => "North America", 'South America' => "South America");} 
    else if ($category == "Sport"){ 
$subcategory = array("Football , Football", "Rugby , Rugby", "Cricket , Cricket"); } 
echo json_encode($subcategory); 

的AJAX

function getsub(category, subcategory) { 

var category = document.getElementById('category').value; 
$('#subcategory').empty(); 
$('#subcategory').append("<option>loading...</option>"); 

//kicking off AJAX 
$.ajax({ 
    url: "../php/subcategory.php", 
    type: "POST", 
    async: true, 
    //this is where we define the data that we will send 
    data: { 
     category: category, 
    }, 
    success: function (subresults) { 
     var subresults = JSON.parse(subresults); 
     $('#subcategory').empty(); 
     $('#subcategory').append("<option value='0'>----Select Sub Categry---</option>"); 
     $.each(subresults, function (i, item) { 

      $('#subcategory').append('<option value="' + subresults[i].id + '">' + subresults[i].name + '</option>'); 

     }); 
    }, 
}); 
return false; 
} 

的原因,我这样做是因为我想保留的子类别在服务器端,并且易于更新而无需干涉代码。目前,这是将数组中的项目输出到下拉框中,但它们未经定义即将通过。你能帮我把正确的值输出到下拉框中吗?

+3

请问您的AJAX调用的工作?向我们展示一些示例数据,因为它在您的AJAX调用('console.log(subresults)')中返回,然后在您的成功函数中解析它们) –

+1

您在执行'echo json_encode($ subcategory);' ? – Sean

+0

你的php数组中没有'id'和'name'键。你应该改变为'subresults [i]'。 – Sean

回答

1

有一件事是,如果你的选项的值和标签是相同的,你不需要用'Europe' => "Europe"和不必要的密钥来设置数组。只是这样设置

$subcategory = array("Europe", "North America", "South America"); 

而在你的JS数组,设定值和标签是这样的:如果你想保持独立的值和标签这样

$.each(subresults, function (i, item) { 
    $('#subcategory').append('<option value="' + item + '">' + item + '</option>'); 
}); 

,:

$subcategory = array('EU' => "Europe", 'NA' => "North America", 'SA' => "South America"); 

然后设置选项值和标签这样的:

$.each(subresults, function (i, item) { 
    $('#subcategory').append('<option value="' + i + '">' + item + '</option>'); 
}); 

使用subresults[i]是不必要的,因为您已经具有的值为item,相当于subresults[i]

0

在你的AJAX调用的subresults[i].idsubresults[i].name所以你必须用这个结构定义你的PHP阵列时:

if ($category == "World"){ 
    $subcategory = array(
     array('id' => "Europe", 'name' => "Europe"), 
     array('id' => "North America", 'name' => "North America"), 
     array('id' => "South America", 'name' => "South America") 
    );} 
else if ($category == "Sport"){ 
    $subcategory = array(
     array('id' => "Football", 'name' => "Football"), 
     array('id' => "Rugby", 'name' => "Rugby"), 
     array('id' => "Cricket", 'name' => "Cricket") 
    ); } 
echo json_encode($subcategory);