2013-03-06 11 views
6

Zwracam dużą porcję kodu HTML z połączenia $.ajax. Łańcuch pochodzący z PHP ma na początku dwie linie podziału, np.Przerwy linii w jQuery ajax wywołanie zwrotne html powoduje błędy

$data = " 

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

Oto wezwanie $.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); 
     } 
    }); 
}); 

Wszystko działa aż dodać .hide().fadeIn(300) w którym momencie rzuca: TypeError: 'undefined' is not an object (evaluating 'hooks.cur = fn') jquery.js:1925. Jeśli usunę podział linii, to działa. Używam $.parseHTML ponieważ jQuery mówi:

Jeśli ciąg jest znany jako HTML, ale może rozpocząć z dowolnego tekstu, który nie jest tag HTML, przekazać go do jQuery.parseHTML(), która zwróci tablica węzłów DOM reprezentujących znaczniki. Kolekcja jQuery może być utworzona z tego, na przykład: $ ($ .seseHTML (htmlString)).

Każdy pomysł, co się dzieje?

+1

Ewentualnie '.parseHTML()' jest exploiding danych HTML do tablicy nie tylko z obiektami jQuery w nim, że jest '\ n' lub coś podobnego się dzieje. –

+0

Spróbuj odfiltrować węzeł tekstowy i sprawdź, czy błąd nie zniknął. '.filter ('*')'. – Musa

+0

Bingo. 'var $ html = $ ($ .parseHTML (dane)). filter ('*');' pracował. Uczyń tę odpowiedź, a ja ją zaakceptuję. –

Odpowiedz

10

Problem wydaje się być spowodowane przez węzeł tekstu w kolekcji można filtrować go z .filter('*')

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

Witam, użyłem przycinania do rozwiązania podobnego problemu, jednak utknąłem na tym samym problemie z inną funkcją. Czy mógłbyś spojrzeć? http://stackoverflow.com/questions/17950520/uncaught-typeerror-with-fadein-in-jquery-1-9 –

0

moich strun HTML nie ma żadnych węzłów tekstowych na najwyższym poziomie, a przynajmniej tak myślałem .. Stwierdziłem, że problem był tylko dodatkowym spacja. Ten pracował dla mnie, i czuje się lepiej niż filtrowanie pustych węzłów później:

$($.parseHTML($.trim(html_string))) 
Powiązane problemy