从ajax响应中提取表

时间:2013-07-23 10:48:01

标签: jquery

我为提取表格的页面提取了一个完整的HTML代码。这是我的代码。

  $(document).ready(function () {
        alert("Hello");
        $.ajax(
        {
        url: '/Member/DownloadUrlData',
        type: "POST",
        dataType: "html",
        async: true,
        cache: false,
        beforeSend: function (request) {

        },
        success: function (data) {

            alert(data);
            var theHtml = $(data).filter('#container>table:first').html();
            $("#rData").append(theHtml);

       },
        error: function (xmlHttpRequest, textStatus, errorThrown) {
                    },
        complete: function (xmlHttpRequest, textStatus) {
       }
   });
    });

但我无法提取表。错误日志中显示的问题是jquery无法访问数据中的“”。我怎么能删除它。

1 个答案:

答案 0 :(得分:2)

问题在于这一行:

var theHtml = $(data).filter('#container>table:first').html();

$(data)会公开body元素的直系子女的所有子女,但#container>table:first不能是body元素的子女,因为{{ 1}}明确是table的孩子。

也许你是这个意思?

#container

编辑:为了回应var theHtml = $(data).filter('#container').children('table:first').html();返回的格式错误的理论HTML:

如果jQuery在尝试解析data时返回语法错误,则表示HTML格式错误。问题是jQuery可以接受各种各样的参数:$(data)将根据是否给出不同的函数运行:

  • 选择器
  • XML或HTML
  • 功能

如果XML或HTML字符串格式错误,它会尝试将其解释为选择器 - 这会导致错误。要强制它以HTML格式解析,请使用以下表达式:

$()

而不是

$.parseHTML(data)

但理想情况下你不必这样做:问题的根源是你的AJAX请求返回的HTML,这可能会导致其他地方出现打嗝。我建议通过validator传递该响应,看看是否可以通过标记来解决问题。