2013-03-06 9 views
6

jQuery ajax html geri arama nedeni hataları kırar. PHP'den gelen dizgenin başında iki satır sonu vardır, örn. İşte

$data = " 

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

$.ajax çağrısıdır: TypeError: 'undefined' is not an object (evaluating 'hooks.cur = fn') jquery.js:1925: Ben .hide().fadeIn(300), aynı tarihte atar işaret eklemek kadar

$('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); 
     } 
    }); 
}); 

Her şey çalışır. Satır sonlarını kaldırırsam çalışır. bir dize HTML olduğu bilinir ancak bir HTML etiketi olmadığı keyfi metinle başlayabilir

ise, dönecektir jQuery.parseHTML() iletecek: jQuery diyor çünkü $.parseHTML kullanıyorum İşaretlemeyi temsil eden DOM düğümleri dizisi. Bir jQuery toplama örneğin bundan oluşturulabilir: $ (. $ ParseHTML (htmlString)).

neler fikrin var mı?

+1

Muhtemelen '.parseHTML()' İçinde jQuery nesnelerle sadece diziye HTML verilerini exploiding olduğunu, yani '\ n ' veya benzer bir şey oluyor. –

+0

Metin düğümünü filtrelemeyi deneyin ve hatanın devam edip etmediğini görün. '.filter ('*') '. – Musa

+0

Bingo. 'Var $ html = $ ($ parseHTML (veri).) Filtre ('*'),. 'Çalıştı. Cevabı ver ve kabul edeceğim. –

cevap

10

sorun herhangi bir üst düzey metin düğümleri yoktu .filter('*')

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

Merhaba, benzer bir sorunu düzeltmek için trim'i kullandım, ancak aynı sorun üzerinde başka bir işlevle karşılaştım. Bir bakabilir misin? http://stackoverflow.com/questions/17950520/uncaught-typeerror-with-fadein-in-jquery-1-9 –

0

Benim HTML dizeleri ile filtreleyebilirsiniz koleksiyonunda metin düğümü neden gibi görünüyor, ya da ben öyle sanıyordum .. Sorunun sadece fazladan boşluk olduğunu buldum. Bu benim için çalıştı ve daha sonra boş bir düğüm filtreleyerek daha iyi hisseder etti:

$($.parseHTML($.trim(html_string))) 
İlgili konular