2013-03-06 60 views
6

我從$.ajax調用中返回大量的HTML。來自PHP的字符串在開始處有兩個換行符,例如jQuery中的換行符ajax html回調導致錯誤

$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))。

任何想法是怎麼回事?

+1

可能'.parseHTML()'是exploiding HTML數據到數組不僅與它的jQuery對象,那就是'\ N' ,或類似的事情正在發生。 – 2013-03-06 22:03:28

+0

嘗試過濾出文本節點並查看錯誤是否仍然存在。 '.filter( '*')'。 – Musa 2013-03-06 22:11:25

+0

賓果。 'var $ html = $($。parseHTML(data))。filter('*');'工作。做出答案,我會接受它。 – 2013-03-06 22:14:49

回答

10

的問題似乎是由集合中的文本節點引起的,你可以用.filter('*')

var $html = $($.parseHTML(data)).filter('*'); 
+0

嗨,我用修剪來解決類似的問題,但堅持與另一個功能相同的問題。你介意一下嗎? http://stackoverflow.com/questions/17950520/uncaught-typeerror-with-fadein-in-jquery-1-9 – 2013-07-30 15:03:50

0

我的HTML字符串過濾出來沒有任何頂級文本節點,我這樣想着..我發現這個問題只是額外的空白。這工作對我來說,感覺比後來篩選出空節點更好:

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