2013-07-11 7 views
22

Mi sto insegnando AJAX per AJAXify il mio sito. Nel mio modello, ho il seguente codice JS per ottenere alcuni dati JSON da una vista, quindi aggiungere i dati a un div.Unchaught TypeError: Impossibile leggere la proprietà 'ownerDocument' di undefined

function filter(type) { 
    $.getJSON(
    '/activity_stream/global-activity-stream/', 
    {xhr: "true", filter: type}, 
    function(data) { 
     $('.mainContent').children().remove(); 
     $(data).appendTo('.mainContent'); 
    }); 
    } 

    $(".btn").click(function() { 
    filter("recent"); 
    }); 
} 

Credo che la mia vista sta tornando corretta JSON, ma ora i dati non viene aggiunto al .mainContent div.

Si dà questo errore:

Uncaught TypeError: Cannot read property 'ownerDocument' of undefined.

+2

Se stai ricevendo JSON indietro, poi basta aggiungerlo nel DOM non è andare a lavorare. Cosa ti aspetti che accada? – Pointy

+0

Immagino che mi aspettassi che carichi i dati nel div ... Come posso ottenere questo? Sono nuovo di questa roba AJAXy ... – Denny

+2

Basta cambiare '$ ('. MainContent'). Children(). Remove(); $ (data) .appendTo ('. mainContent'); 'a' $ ('. mainContent'). html (data); 'Il problema è che quando si esegue' appendTo', jquery si aspetta '$ (data)' essere un nodo dom, che probabilmente non è in questo caso – karthikr

risposta

26

Assicurarsi che si sta passando un selettore a jQuery, non qualche forma di dati:

$('.my-selector') 
non

:

$([ 'my-data' ]) 
12

I avuto un problema simile Stavo usando jQuery.map ma ho dimenticato di usare jQuery.map (...). Get() alla fine per lavorare con un array normale.

0

Lo stesso problema si presentava all'interno di $elms.each().

Perché:

  1. la funzione si passa alla .each(Function) espone (almeno) due argomenti; il primo essendo l'indice ed il secondo essendo l'elemento nell'elemento corrente nell'elenco e
  2. perché altri metodi di ciclica simili forniscono corrente l'elemento nella matrice prima che l'indice

si può essere tentati di fare questo:

$elms.each((item) => $(item).addClass('wrong')); 

Quando questo è quello che vi serve:

$elms.each((index, item) => $(item).addClass('wrong')); 
Problemi correlati