1

我正在从 javascript 调用 web 方法。Web 方法从 Northwind 数据库返回一组客户。我正在使用的示例在这里:使用 ASP.NET AJAX 调用 Web 服务

我不知道如何编写这个 javascript 方法:CreateCustomersTable

这将创建 html 表来显示返回的数据。任何帮助,将不胜感激。

我的 javascript

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+"; }
}

我的网络方法

    [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;
    }
4

3 回答 3

4

尝试查看调试模式下的结果变量值是什么。如果结构看起来是我想象的结构,那么这样的事情可能会起作用:

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;    
}

然后你可以这样做:

var existingDiv = document.getElementById('Id of an existing Div');
existingDiv.innerHTML = CreateCustomersTable(result);

我希望这对你有帮助。

于 2009-01-28T22:16:51.200 回答
2

像这样,假设您在“结果”值中返回了 JSON。“容器”是一个 id 为“容器”的 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);
于 2009-01-28T22:05:59.490 回答
1

您应该将数组作为 JSON 或 XML 传递,而不仅仅是它的 toString() 值(除非 offcourse 返回 JSON 或 XML)。请注意,JSOn 更适合 javascript,因为它是一种 javascript 原生格式。
此外,告诉您除 IE 之外的浏览器无法进行 DOM 操作的人应该对他/她做了可怕的事情。

如果您的格式是 JSON,您可以只循环它们并创建元素并打印它们。(一旦您弄清楚您的服务返回什么格式,我们就可以为您提供更好的帮助。)

于 2009-01-28T21:58:51.410 回答