使用 AJAX 解析从 ASP 页面返回的 HTML 表并提取特定单元格

Posted

技术标签:

【中文标题】使用 AJAX 解析从 ASP 页面返回的 HTML 表并提取特定单元格【英文标题】:Parse an HTML Table returned from an ASP page using AJAX and Extract Specific Cells 【发布时间】:2011-12-19 21:32:34 【问题描述】:

工作 Intranet 上有一个 ASP 页面,它返回来自众多传感器的数据。数据以表格形式呈现,具有多行和多列。

我认为如果我能在我们部门的网站上显示一些输出结果会很酷。

我想使用 ajax 打开 ASP 页面并从结果表中获取一些数据点。

使用 AJAX 打开页面很容易,但我不知道之后该怎么做。

表格的格式如下:

<table>
  <tr>
    <td>Data ID 1</td>
    <td>Description</td>
    <td>Data</td>
  </tr>
  <tr>
    <td>Data ID 2</td>
    <td>Description</td>
    <td>Data</td>
  </tr>
</table>

每一行的第一个单元格是唯一的ID,那么同一行的第5列就是我想要的值。

function loadXMLDoc()

    var xmlhttp;

    if (window.XMLHttpRequest) // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
     else // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        

    xmlhttp.onreadystatechange=function() 
        if (xmlhttp.readyState==4 && xmlhttp.status==200) 
            document.getElementById("testDiv").innerhtml=xmlhttp.responseText;
        
    

    xmlhttp.open("GET","http://plantdata/showData.asp",true);
    xmlhttp.send();

如何通过唯一 ID 获取数据?

【问题讨论】:

【参考方案1】:
xmlhttp.onreadystatechange=function() 
  if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    var target = document.getElementById("testDiv");
    target.innerHTML = xmlhttp.responseText;
    extractIDs(target);
  


function extractIDs(container) 
  var trs = container.getElementsByTagName("TR");

  for (var i=0; i<trs.length; i++) 
    var tds = trs[i].getElementsByTagName("TD"),
        txt = tds[0].textContent || tds[0].innerText;  // innerText for IE

    alert("row " + (i+1) + ": " + txt);
   
;

【讨论】:

这个问题是我想避免在主页上实际显示整个表格。我只想显示某些行。我需要检索文档,并在不先显示的情况下对其进行搜索。 @SharpBarb 好吧,将其加载到带有display: none; 的容器中。问题解决了。【参考方案2】:

这肯定是 jQuery 的工作。我可以看看输出,然后我会告诉你答案,但它是沿着这些思路:

$(document).ready(function () 
        $.ajax(
            url: "TableData.html",
            type: "GET",
            success: function (data) 
                var tempData = $(data);
                //alert(tempData.html());

                tempData.find("tr td[id]").each(function (i) 
                    alert($(this).siblings(":nth-child(5n)").text());
                );
            
        );
    );

【讨论】:

我有点希望有一个不使用 jQuery 的解决方案。 @SharpBarb - 为什么?让它完成繁重的工作。 这有什么问题?它是一个跨浏览器工具箱,可简化您的开发。它没有那么重。它产生简单的代码(见 Sam 的回答)。 @SharpBarb - 如果你想使用 jQuery,我已经编辑了我的帖子来满足你的需要。 @Zopieux 我完全支持 jQuery,但它的问题是人们也应该知道如何在没有它的情况下实现目标。【参考方案3】:

遍历表格的行:

var data;
var rows=document.getElementById("testDiv").getElementsByTagName('table')[0].rows;
for(var i=0; i<rows.length; ++i)

    var cells=rows[i].cells;
    if(cells[0].innerHTML == uniqueID)
    
        data=cells[4].innerHTML;
        break;
    

【讨论】:

以上是关于使用 AJAX 解析从 ASP 页面返回的 HTML 表并提取特定单元格的主要内容,如果未能解决你的问题,请参考以下文章

从 Javascript 调用 JSONP Ajax 回调

在 ASP.NET CORE 表单中使用 AJAX 返回 JSON

使用 jquery ajax 从 asp.net 网页表单页面调用 web api url

在 ASP.NET MVC 中使用 AJAX 方法时使用 C# 控制器重定向到页面

ASP.NET使用Ajax

使用ajax的get请求渲染html