2016-01-14 30 views
-1

我有這個代碼,我用它來填充我的網站上的下拉框。它是直接從數據庫中一些部門,然後應該把部門的期權價值的ID,然後將部門名稱作爲選項「名稱」(名字就說明)Webservice返回正確的數據,但解析爲undefined

/** 
* This function is Run when creating the dropdown to choose a department 
* when creating a new activity. 
*/ 
function CreateNewActivityDepartmentDropdown() { 
    $.getJSON("http://localhost/GetDepartmentsForDropdown", function (data) { 
     var object = $.parseJSON(data); 
     var dropdown = document.getElementById("new-activity-modal-department-dropdown"); 
     for (var department in object) { 
      if (object.hasOwnProperty(department)) { 
       var array = department.split(','); 
       var option = document.createElement("option"); 
       option.id = array[0]; 
       option.innerHTML = array[1]; 
       dropdown.add(option); 
      } 
     } 
    }); 
} 

對象所具有正確的數據在裏面。我使用Google Chromes調試器進行了檢查。數據由id,department字符串組成,並在我的for循環中嘗試並拆分我得到的字符串,但首先每個選項的值似乎只是一個增量值(0-n)而不是我擁有的id(1-12 )和選項文本是「未定義」。

當然,當我調試我發現它似乎ID和文本是不存在的。我在這裏錯過了什麼?在JavaScript開發:)

編輯

添加了產量仍相當新的console.log(data, object)

["1,Commercial","2,Economy","3,Technical Dept.","4,IT","5,Flight Op","6,Legal","7,Ground Op","8,BDO","9,Administration","10,Training","11,Passenger Service","12,Cabin"] Array[12] 

EDIT 2

數據的目的是從web服務接收。 web服務是用C#和我用來獲取它的代碼如下:

public static List<String> GetDepartmentDropdownList() 
{ 
    List<String> departments = new List<String>(); 
    using (SqlConnection conn = GetSqlConnection()) 
    { 
     using (SqlCommand cmd = new SqlCommand()) 
     { 
      cmd.CommandText = "SELECT * FROM dbo.Department WHERE is_used != 0"; 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = conn; 

      conn.Open(); 
      using (SqlDataReader reader = cmd.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
        Int32 id = reader.GetInt32(0); 
        String department = id + "," + reader.GetString(1); 
        departments.Add(department); 
       } 
      } 

     } 
    } 

    return departments; 
} 

,這裏是該網站所說:

public String GetDepartmentsForDropdown() 
{ 
    List<String> departments = Facade.GetDepartmentDropdownList(); 

    return JsonConvert.SerializeObject(departments); 
} 
+0

'console.log(data,object)',告訴我們你應該使用哪些數據。 – deceze

+0

@deceze在這裏,你去了,添加到主帖。 :) – OmniOwl

+0

@SimonH - 否。屬性名稱被插入到前一行的'department'變量中。 – Quentin

回答

0

對於那些有興趣在這裏是我結束瞭解決方案:

/** 
* This function is Run when creating the dropdown to choose a department 
* when creating a new activity. 
*/ 
function CreateNewActivityDepartmentDropdown() { 
    $.getJSON("http://localhost/GetDepartmentsForDropdown", function (data) { 
     var object = $.parseJSON(data); 
     var dropdown = document.getElementById("new-activity-modal-department-dropdown"); 
     for (var i = 0; i < object.length; i++) { 
      var array = object[i].split(','); 
      var option = document.createElement("option"); 
      option.value = array[0]; 
      option.innerHTML = array[1]; 
      dropdown.add(option); 
     } 
    }); 
} 

不需要C#代碼編輯。我不知道昆汀給我的解決方案,但似乎沒有這樣做:

var object = $.parseJSON(data); 

我沒有辦法讓它工作。我很樂意給出答案,但是可以解釋這一點。

1

getJSON解析HTTP響應正文JSON填充data前用它。

var object = $.parseJSON(data);會將數組轉換爲字符串,然後嘗試將其解析爲JSON(由於它不是JSON而失敗)。不要這樣做。

+0

嗯。該對象本身通過使用Newton Softs庫的webservice序列化爲Json。在我收到它之前。 – OmniOwl

+1

@Vipar - 你是說HTTP響應由一個JSON字符串的JSON文本表示組成,它本身包含JSON數組的JSON文本表示形式? – Quentin

+0

這是一路下來的JSON ... – deceze