Asp.net 用Javascript中的对象数组创建HTML表
我正在从javascript调用一个web方法。web方法从northwind数据库返回客户数组。我的工作示例如下: 我不知道如何编写这个javascript方法:CreateCustomerTable 这将创建html表以显示返回的数据。任何帮助都将不胜感激 我的javascriptAsp.net 用Javascript中的对象数组创建HTML表,asp.net,javascript,web-services,asp.net-ajax,asmx,Asp.net,Javascript,Web Services,Asp.net Ajax,Asmx,我正在从javascript调用一个web方法。web方法从northwind数据库返回客户数组。我的工作示例如下: 我不知道如何编写这个javascript方法:CreateCustomerTable 这将创建html表以显示返回的数据。任何帮助都将不胜感激 我的javascript function GetCustomerByCountry() { var country = $get("txtCountry").value; AjaxWebService.GetCustomersB
function GetCustomerByCountry() {
var country = $get("txtCountry").value;
AjaxWebService.GetCustomersByCountry(country, OnWSRequestComplete, OnWSRequestFailed);
}
function OnWSRequestComplete(results) {
if (results != null) {
CreateCustomersTable(results);
//GetMap(results);
}
}
function CreateCustomersTable(result) {
alert(result);
if (document.all) //Filter for IE DOM since other browsers are limited
{
// How do I do this?
}
}
else {
$get("divOutput").innerHTML = "RSS only available in IE5+"; }
}
我的web方法
[WebMethod]
public Customer[] GetCustomersByCountry(string country)
{
NorthwindDALTableAdapters.CustomersTableAdapter adap =
new NorthwindDALTableAdapters.CustomersTableAdapter();
NorthwindDAL.CustomersDataTable dt = adap.GetCustomersByCountry(country);
if (dt.Rows.Count <= 0)
{
return null;
}
Customer[] customers = new Customer[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
NorthwindDAL.CustomersRow row = (NorthwindDAL.CustomersRow)dt.Rows[i];
customers[i] = new Customer();
customers[i].CustomerId = row.CustomerID;
customers[i].Name = row.ContactName;
}
return customers;
}
您应该以JSON或XML的形式传递数组,而不仅仅是它的toString值,除非该值返回JSON或XML。请注意,JSOn更适合javascript,因为它是javascript本机格式。 另外,那个告诉你除IE之外的浏览器不能进行DOM操作的人很可能对他/她做了可怕的事情
如果您的格式是JSON,您可以只循环它们,创建元素并打印它们。一旦您确定了服务返回的格式,我们就可以更好地帮助您。您应该将数组作为JSON或XML传递,而不仅仅是它的toString值,除非该数组返回JSON或XML。请注意,JSOn更适合javascript,因为它是javascript本机格式。 另外,那个告诉你除IE之外的浏览器不能进行DOM操作的人很可能对他/她做了可怕的事情
如果您的格式是JSON,您可以只循环它们,创建元素并打印它们。一旦您确定了服务返回的格式,我们可以更好地帮助您。类似这样的内容,假设您在结果值中返回了JSON。容器是一个id为container的div。我克隆节点是为了节省内存,但如果您想为基本元素分配一些基类,也可以这样做
var table = document.createElement('table');
var baseRow = document.createElement('tr');
var baseCell = document.createElement('td');
var container = document.getElementById('container');
for(var i = 0; i < results.length; i++){
//Create a new row
var myRow = baseRow.cloneNode(false);
//Create a new cell, you could loop this for multiple cells
var myCell = baseCell.cloneNode(false);
myCell.innerHTML = result.value;
//Append new cell
myRow.appendChild(myCell);
//Append new row
table.appendChild(myRow);
}
container.appendChild(table);
类似这样,假设您在结果值中返回了JSON。容器是一个id为container的div。我克隆节点是为了节省内存,但如果您想为基本元素分配一些基类,也可以这样做
var table = document.createElement('table');
var baseRow = document.createElement('tr');
var baseCell = document.createElement('td');
var container = document.getElementById('container');
for(var i = 0; i < results.length; i++){
//Create a new row
var myRow = baseRow.cloneNode(false);
//Create a new cell, you could loop this for multiple cells
var myCell = baseCell.cloneNode(false);
myCell.innerHTML = result.value;
//Append new cell
myRow.appendChild(myCell);
//Append new row
table.appendChild(myRow);
}
container.appendChild(table);
尝试查看调试模式下的结果变量值。如果这个结构看起来像我想象的那样,像这样的东西可以工作:
function CreateCustomersTable(result) {
var str = '<table>';
str += '<tr><th>Id</th><th>Name</th></tr>';
for ( var i=0; i< result.length; i++){
str += '<tr><td>' + result[i].CustomerId + '</td><td>' + result[i].Name + '</td></tr>';
}
str += '</table>';
return str;
}
我希望这能对您有所帮助。尝试查看调试模式下的结果变量值。如果这个结构看起来像我想象的那样,像这样的东西可以工作:
function CreateCustomersTable(result) {
var str = '<table>';
str += '<tr><th>Id</th><th>Name</th></tr>';
for ( var i=0; i< result.length; i++){
str += '<tr><td>' + result[i].CustomerId + '</td><td>' + result[i].Name + '</td></tr>';
}
str += '</table>';
return str;
}
我希望这能对您有所帮助。如果您提供精确的结果数据格式,这会容易得多。我认为Web方法将是结果的来源,一组客户对象。这就是你所说的精确数据格式吗?如果你提供结果的精确数据格式,这会容易得多。我认为Web方法将是结果的来源,一系列客户对象。这就是您所说的精确数据格式吗?我如何知道返回的结果是否为JSON?我如何知道返回的结果是否为JSON?您的CreateCustomerTable函数中从未使用var表,应该删除它。它看起来像是一些被删除键滑掉的旧代码!哈哈,重温旧答案总是很有趣和令人惊讶的。我正在编辑这篇文章,很好。现在,我推荐@Mike Robinson在他的回答中提出的处理DOM的方法,而不是那种字符串连接混乱的方法。然而,这似乎不再是事实;如果可以的话,我会做一些测试。您的CreateCustomerTable函数中从来没有使用过var表,应该删除它。它看起来像是一些被删除键滑掉的旧代码!哈哈,重温旧答案总是很有趣和令人惊讶的。我正在编辑这篇文章,很好。现在,我推荐@Mike Robinson在他的回答中提出的处理DOM的方法,而不是那种字符串连接混乱的方法。然而,这似乎不再是事实;如果可以的话,我会做一些测试。