【发布时间】:2014-07-08 20:23:14
【问题描述】:
我有一个小网站,我试图从数据库中获取某个列(SQL Server Management Studio)并将这些值插入到下拉列表中。
我的 HTML 代码加载一个带有下拉列表的简单页面。
<html>
<body onload = "Location();">
<h4>Home Page</h4>
CompanyName
<select id="company" name="C1" >
<option>Pick A Location</option>
</select>
</body>
<html>
在我的 JavaScript 函数执行任何“工作”之前,它会导航到一个 c# 页面。我调试了 c# 代码,它确实输出正确。它显示:
"<root>\n<CompanyName>\n\t<option>AAA</option>\n\t<option>BBB</option>\n\t<option>CCC</option>\n\t<option>DDD</option>\n\t<option>EEE</option>\n\t<option>FFF</option>\n\t<option>GGG</option>\n\t<option>HHH</option>\n</CompanyName>\n</root>"
这只是我需要输入下拉列表的数据库中的列。 javascript 函数应该抓取这段代码并深入到选项部分,并将每个选项一个一个地放入下拉列表中。由于从 c# 页面导航到 javaScript 页面之间的某种原因,我丢失了 xml 信息。有什么我遗漏的东西还是有什么不正确的?谢谢。
function Location() {
$.ajax({
url: "Test.aspx",
beforeSend: function (xhr) {
xhr.overrideMimeType("text/plain; charset=x-user-defined");
}
}).done(function (data) {
if (console && console.log) {
xml = data;
xmlDoc = $.parseXML(xml);
$xml = $(xmlDoc);
var settingHTML = "";
settingHTML += "<option value = 'null' > Pick a Location </option>";
$xml.find('root').each(function () {
$xml.find('CompanyName').each(function () {
// one at a time
$(this).children().each(function () {
settingHTML += "<option value='" + $(this).text() + "' >" + $(this).text() + "</option>";
});
});
});
$("#company").html(settingHTML);
}
});
}
我还将添加我的 c# 代码,因为它似乎可能是我返回字符串的方式
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string root = "<root>\n";
root += fill_company();
root += "</root>";
Response.Write(root);
}
protected string fill_company()
{
OdbcDataReader reader;
string myConnString = "DSN=DevSql12-1;";
OdbcConnection conn = new OdbcConnection(myConnString);
OdbcCommand mycommand = new OdbcCommand();
mycommand.Connection = conn;
conn.Open();
mycommand.CommandText = "SELECT CompanyName FROM [PS_Settings].[cams].[Client];";
reader = mycommand.ExecuteReader();
string CompanyLocation = "";
CompanyLocation += "<CompanyName>\n";
object[] meta = new object[1];
bool read;
if (reader.Read() == true)
{
do
{
int NumberOfColumns = reader.GetValues(meta);
for (int i = 0; i < NumberOfColumns; i++)
{
CompanyLocation += "\t<option>" + meta[i].ToString() + "</option>\n";
}
read = reader.Read();
} while (read == true);
}
CompanyLocation += "</CompanyName>\n";
return CompanyLocation;
}
}
【问题讨论】:
-
这似乎有效:jsfiddle.net/K75eC
-
由于某种原因,c#代码中的“root”字符串是一个xml字符串,没有被发送到js“location”函数中的“data”变量
-
好交易。很高兴您发现了问题。
-
感谢您的帮助;欣赏它
标签: c# javascript html ajax xml