2011-10-06 86 views
2

對於我正在開發的項目,當用戶選擇他的家庭成員的出生國時,我需要動態檢索某個特定國家的狀態。我正在使用AJAX來實現這一點。如何解決選擇國家時動態顯示狀態的問題?

我被允許只提及7個家庭成員的詳細信息,所以我的家庭成員的國家和州的狀態有7個下拉菜單。

每當用戶選擇一個特定的國家,javascript函數showState被調用(它存在於一個單獨的.js文件中)。該函數有2個參數 - 其中一個是指定所選國家的字段位置的整數(位置)(即,是否爲國家編號1,2,3等,直到7,以便相應的狀態可以顯示在狀態字段中 - state1,state2,state3 ....)。第二個是從表單中傳遞的國家的名稱。

該函數調用一個控制器,其中檢索所選國家的狀態。現在這些狀態必須被顯示出來。但這些州並沒有出現。

我的代碼是:

var stateArr=["state1","state2","state3","state4","state5","state6","state7"]; 
function showState(place,str){ 
    ------- 
    var url="State1Controller"; 
    url +="?Country1=" +str +"&state=" +stateArr[place-1]; 
     xmlHttp.onreadystatechange = stateChange1; 
     xmlHttp.open("GET", url, true); 
     xmlHttp.send(null); 
} 

function stateChange1(){ 

    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){ 
     document.getElementById(stateArr[place]).innerHTML=xmlHttp.responseText  
     }  
} 

當我說硬編碼在狀態1的document.getElementById,然後我得到了想要的結果,但不是相反。 請幫忙。

+0

被'place'一個全局變量? – f0x

+0

Hej在哪裏定義了xmlHttp?你定義它 – megakorre

+0

哦.. .. ..地方是不是全球... –

回答

1

我相信你命名你的形式COUNTRY1,COUNTRY2等和狀態1,狀態2,等相應的狀態字段因此,如果用戶在該領域COUNTRY1選擇一個國家,然後從狀態選定的國家應該出現在現場state1。 我希望我有你的問題。

您應該在這種情況下應該做的第一件事是檢查您是否在函數中獲得正確的值。 使用showState函數中的alert(place),alert(str)來檢查值。 還在stateChange1()函數中使用alert(stateArr [place])。 也嘗試在這個功能提醒(地方)。

正如你所說,當你對state1這樣的值進行硬編碼時,這段代碼正常工作,我相信placeCode的值不會在stateChange1()函數中傳遞。您可以通過alert(place)找出正確的值是否正在傳遞給stateChange1()函數。如果適當的值不通過我認爲這是問題,您可以編輯代碼:

功能showState(地方,STR){

如果(地方== 1){

xmlHttp.onreadystatechange = stateChange1; 
    xmlHttp.open("GET", url, true); 
    xmlHttp.send(null); 
}else if(place==2){ 
    xmlHttp.onreadystatechange = stateChange2; 
    xmlHttp.open("GET", url, true); 
    xmlHttp.send(null); 
} 

}

功能stateChange1(){

if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){ 
    document.getElementById(stateArr[0]).innerHTML=xmlHttp.responseText  

}  

} FUNC stateChange2(){
if(xmlHttp.readyState == 4 || XMLHTTP。readyState的== 「完成」){
的document.getElementById(stateArr [1])。innerHTML的= xmlHttp.responseText
}}

2

那是因爲可變place是在函數stateChange1

的範圍未定義嘗試此。

var stateArr = ["state1", "state2", "state3", "state4", "state5", "state6", "state7"]; 
var p; 

function showState(place, str) { 
    //------- 
    p = place; 
    var url = "State1Controller"; 
    url += "?Country1=" + str + "&state=" + stateArr[p - 1]; 
    xmlHttp.onreadystatechange = stateChange1; 
    xmlHttp.open("GET", url, true); 
    xmlHttp.send(null); 
} 

function stateChange1() { 
    if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") { 
     // shouldn't we use 'p -1' instead of 'p' here also? 
     document.getElementById(stateArr[p]).innerHTML = xmlHttp.responseText 
    } 
} 
相關問題