我从javascript调用web方法。 Web方法从northwind数据库返回一组客户。我工作的例子是:Calling Web Services with ASP.NET AJAX
我不知道如何编写这个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;
}
答案 0 :(得分: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);
我希望这对你有所帮助。
答案 1 :(得分:2)
这样的事情,假设您在“result”值中返回了JSON。 “容器”是id为“容器”的div。我正在克隆节点以节省内存,但是如果你想为“base”元素分配一些基类。
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);
答案 2 :(得分:1)
您应该将数组作为JSON或XML传递,而不仅仅是它的toString()值(除非该offcourse返回JSON或XML)。请注意,JSOn更适合javascript,因为它是一种javascript原生格式 也告诉你除了IE以外的浏览器不能做DOM操作的人应该对他/她做了可怕的事情。
如果你的格式是JSON,你可以只是循环它们并创建元素并打印它们。 (一旦你弄清楚你的服务返回什么格式,我们可以帮助你更好。)