2009-11-18 69 views
2

我想填充使用jQuery的$ .ajax方法的選擇框(城市相關的狀態)。從服務器json響應(如何填充從selectbox中的服務器的響應)

我寫在我的PHP腳本

$('#cmbState').change(function(){ 
    $('#cmbCity').children().remove(); 
    $.ajax({ 
    type: "POST", 
    url: "../include/ajax.php", 
    data: "option=getCitiesList&stateid="+$(this).val()+"", 
    dataType: "json", 
    complete: function(response){ 
    'what should I write in here ..?' 
    }, 
    beforeSend: function(){$('#cmbCity').addClass('show_loading_in_center')}, 
    success: function(){$('#cmbCity').removeClass('show_loading_in_center')} 
    }); 
    }); 

以下,並在(其中查詢被用於獲取realted城市發送的文件)的文件「ajax.php」我做了

$i=0; 
foreach($cities as $city) 
{ 
    $response[$i]['id'] = $city['pk_cityid']; 
    $response[$i]['name'] = $city['name']; 
    $i++; 
} 
echo json_encode($response); 

現在,響應以XMLHTTPResponse對象的形式出現。 我應該如何將響應填入城市選擇框?

請幫忙,我真的被困在這裏。

感謝

回答

2
$('#cmbState').change(function() { 
    $.ajax({ 
     type: "POST", 
     url: "../include/ajax.php", 
     data: {option: "getCitiesList", stateid: $(this).val()}, 
     dataType: "json", 

     success: function (data) { 
      var $cmbCity = $('#cmbCity').empty(); 
      $.each(data, function() { 
       $cmbCity.append('<option value="' + this.id + '">' + this.name + '</option>') 
      }); 
     }, 

     beforeSend: function(){ $('#cmbCity').addClass('show_loading_in_center') }, 
     complete: function(){ $('#cmbCity').removeClass('show_loading_in_center') } 
    }); 
}); 

你需要寫一個success處理器將與傳遞的數據(completed被稱爲甚至錯誤)被調用。數據作爲第一個參數傳遞。我們首先選擇empty()並將其分配給$cmbCity以提高性能。然後,我們使用$.each(跨瀏覽器jQuery迭代)遍歷data,該文件將每個元素綁定到this。使用我們在#cmbCity中選擇創建新選項。

上面的代碼假定響應是以下格式:

[{"id": 1, "name": "London"}, 
{"id": 2, "name": "Paris"}, 
{"id": 3, "name": "New York"}] 

另外,還要注意data(在上面的$就調用)是鍵值格式 - jQuery將自動序列化。

+0

:) 偉大的工作像一個魅力.. 感謝的人。你救了我.. :-) – 2009-11-18 09:38:23