jQuery中的换行符ajax html回调导致错误

时间:2013-03-06 21:59:35

标签: ajax jquery

我从$.ajax电话中返回了一大块HTML。来自PHP的字符串在开头有两个换行符,例如

$data = "

<div>
     <p>Here is some text</p>
</div>";

以下是$.ajax电话:

$('form#form_id').submit(function(e){
    e.preventDefault();
    $form = $(this);
    $.ajax({
        url: $form.attr('action'),
        type: $form.attr('method'),
        data: $form.serialize(),
        dataType: 'html',
        success: function(data) {
            var $html = $($.parseHTML(data));
            $html.appendTo('#container_id').hide().fadeIn(300);
        }
    });
});

一切正常,直到我添加.hide().fadeIn(300)时它才会抛出:TypeError: 'undefined' is not an object (evaluating 'hooks.cur = fn') jquery.js:1925。如果我删除换行符就行了。我正在使用$.parseHTML,因为jQuery说:

  

如果已知字符串是HTML,但可以以任意文本开头   不是HTML标记,将其传递给jQuery.parseHTML(),它将返回一个   表示标记的DOM节点数组。一个jQuery集合可以   由此创建,例如:$($。parseHTML(htmlString))。

知道发生了什么事吗?

2 个答案:

答案 0 :(得分:10)

问题似乎是由集合中的文本节点引起的,您可以使用.filter('*')

过滤掉它
var $html = $($.parseHTML(data)).filter('*');

答案 1 :(得分:0)

我的HTML字符串没有任何顶级文本节点,或者我认为......我发现问题只是额外的空白。这对我有用,并且比以后过滤掉空节点感觉更好:

$($.parseHTML($.trim(html_string)))