2012-04-03 76 views
0

我想要完成的是以下內容:Jquery國家/州Json和更多

我有一個國家框。

<select class="country singleListBox" name="Country"> 
    <option value="UNITED STATES">UNITED STATES</option> 
    <% Call GetCountry %> 
</select> 

所有GetCountry都會將其填入客戶端啓用的國家/地區。

我有一個狀態框。

<select class="autoship singleListBox" name="State"> 
    <option value="active">Utah</option> 
</select> 

我有一個頁面構建出的JSON將包含所選國家的狀態列表,或者返回一個空值。

這裏是什麼樣子沒空:

{ 
    "regions": [ 
     { 
      "region": "AK" 
     }, 
     { 
      "region": "AL" 
     }, 
     { 
      "region": "AR" 
     }, 
     { 
      "region": "AS" 
     }, 
     { 
      "region": "AZ" 
     }, 
     { 
      "region": "CA" 
     }, 
     { 
      "region": "CO" 
     }, 
     { 
      "region": "CT" 
     }, 
     { 
      "region": "DE" 
     }, 
     { 
      "region": "DC" 
     }, 
     { 
      "region": "FM" 
     }, 
     { 
      "region": "FL" 
     }, 
     { 
      "region": "GA" 
     }, 
     { 
      "region": "GU" 
     }, 
     { 
      "region": "HI" 
     }, 
     { 
      "region": "ID" 
     }, 
     { 
      "region": "IL" 
     }, 
     { 
      "region": "IN" 
     }, 
     { 
      "region": "IA" 
     }, 
     { 
      "region": "KS" 
     }, 
     { 
      "region": "KY" 
     }, 
     { 
      "region": "LA" 
     }, 
     { 
      "region": "ME" 
     }, 
     { 
      "region": "MH" 
     }, 
     { 
      "region": "MD" 
     }, 
     { 
      "region": "MA" 
     }, 
     { 
      "region": "MI" 
     }, 
     { 
      "region": "MN" 
     }, 
     { 
      "region": "MS" 
     }, 
     { 
      "region": "MO" 
     }, 
     { 
      "region": "MT" 
     }, 
     { 
      "region": "NE" 
     }, 
     { 
      "region": "NV" 
     }, 
     { 
      "region": "NH" 
     }, 
     { 
      "region": "NJ" 
     }, 
     { 
      "region": "NM" 
     }, 
     { 
      "region": "NY" 
     }, 
     { 
      "region": "NC" 
     }, 
     { 
      "region": "ND" 
     }, 
     { 
      "region": "MP" 
     }, 
     { 
      "region": "OH" 
     }, 
     { 
      "region": "OK" 
     }, 
     { 
      "region": "OR" 
     }, 
     { 
      "region": "PW" 
     }, 
     { 
      "region": "PA" 
     }, 
     { 
      "region": "PR" 
     }, 
     { 
      "region": "RI" 
     }, 
     { 
      "region": "SC" 
     }, 
     { 
      "region": "SD" 
     }, 
     { 
      "region": "TN" 
     }, 
     { 
      "region": "TX" 
     }, 
     { 
      "region": "UT" 
     }, 
     { 
      "region": "VT" 
     }, 
     { 
      "region": "VI" 
     }, 
     { 
      "region": "VA" 
     }, 
     { 
      "region": "WA" 
     }, 
     { 
      "region": "WV" 
     }, 
     { 
      "region": "WI" 
     }, 
     { 
      "region": "WY" 
     }, 
     { 
      "region": "AA" 
     }, 
     { 
      "region": "AE" 
     }, 
     { 
      "region": "AP" 
     } 
    ] 
} 

這裏是什麼樣子空:

{ 
    "regions": [ 
     { 
      "region": "empty" 
     } 
    ] 
} 

我所要做的,就是當他們改變的值國家它發佈到我的json頁面,並回吐找到的區域,或離開區域字符串值爲空。

對我來說,訣竅是如果它返回一個區域列表,我需要將其構建到上述select -> option部分。但是如果它返回空白,我需要一個input box here of type text來代替select -> option

完成此操作的最佳方式/最佳實踐是什麼?當他們改變國家時,我可以處理JSON的發佈,我認爲我會遇到麻煩的部分是在區域爲空時切換輸入的選擇。

我想解析成一個jquery對象沒有太多的成功。

$('select[name=Country]').change(function() { 
       console.log(this.value); 
       $.getJSON('message_center_getRegions.asp', { country: this.value }, function (json) { 
       var options = ''; 
       var obj = $.parseJSON(json); 
       console.log('count' + obj.regions.count); 
       console.log(json); 
      }) 

console.log(json)並且它顯示了一個有62個不同區域的對象。當我選擇一個在數據庫中沒有區域的國家時,它正確地顯示它是空的。我似乎無法得到obj不爲空console.log('count' + obj.regions.count);obj is null

+0

理想情況下,如果沒有區域,則響應不應返回「區域」:[{「region」:「empty」}]'。它應該返回一個像這樣的空白列表:「'regions」:[]' – xbonez 2012-04-03 22:01:55

+0

@xbonez謝謝,我可以改變它。我不確定如何檢查空的json。 – 2012-04-03 22:02:56

+0

查看下面的答案 – xbonez 2012-04-03 22:04:17

回答

1

理想的情況下,如果沒有的區域,響應不應返回

"regions" : [ { "region" : "empty" } ] 

它應該只是返回一個空列表這樣

"regions" : [] 

現在,當你解析JSON成一個Javascript對象,regions.count將爲0

所以,

// parse response into JS object 

if (regions.count > 0) 
{ 
    //create select element here 
} 
else 
{ 
    //input element here 
} 
+0

這非常有道理,謝謝。創建HTML元素並隱藏它們並使用上面的代碼來隱藏/顯示需要的元素,或者最好在jquery中創建整個元素更好嗎?從來沒有做過第二,不知道從哪裏開始,如果這是更好的方法。 – 2012-04-03 22:09:51

+0

理想情況下,您應該根據需要創建它們,以便在DOM中沒有不必要的元素。但是,DOM中有一個無關元素的效果不會很明顯。 – xbonez 2012-04-03 22:17:59

+0

任何想法當我試圖解析這個對象時,我做錯了什麼? – 2012-04-03 22:24:11