2013-10-29 10 views
5

Sto cercando di ottenere dati utilizzando jquery ajax, tutto funziona correttamente e ottengo quello che voglio, ma non riesco a visualizzarlo perché ottengo un Uncaught TypeError: impossibile leggere la proprietà 'display' di undefined.Interfaccia utente jQuery: Uncaught TypeError: Impossibile leggere la proprietà 'display' di undefined

Qui il codice. Qualche idea?

/* 
* Get the data from the ajax call and display a dialog 
*/ 

function CreateDialog(email) { 

    // get the data from the ajax call 
    var promise = AjaxSubscribe(email) 

    // if data are available, show the dialog 
    promise.success(function (data) { 
     // data is a simple html code 
     var dialog = $(data); 

     // can't setup the dialog! Error 
     // Uncaught TypeError: Cannot read property 'display' of undefined 
     dialog.dialog({ 
      autoOpen: false, 
      modal: true, 
      show: { 
       effect: "blind", 
       duration: 1000 
      }, 
      hide: { 
       effect: "explode", 
       duration: 1000 
      } 
     }); 

     dialog.dialog("open"); 
     return false; 
    }); 
} 

Questa è l'uscita dei dati

console.log(data) 

<p>Data debugging</p> 
<ul> 
    <li>Ip address: 193.125.139.18</li> 
    <li>Country Name: Italy</li> 
    <li>Country Code: IT</li> 
    <li>Email: [email protected]</li> 
</ul> 
+2

cosa contiene 'data' quando viene restituito dalla chiamata ajax? – glomad

+0

Per qualche motivo non penso che 'data' sia ciò che pensi sia. 'console.log (data)' e condividi l'output! – tymeJV

+0

Aggiunti i dati in uscita alla domanda. Ovviamente l'IP è un falso: D –

risposta

7

provare avvolgendo il codice HTML di dati all'interno di un contenitore, sia sul backend o il frontend:

var dialog = $('<div/>').html(data); 

non sono sicuro .dialog() funzionerà su più frammenti di documenti (hai un <p> e un <ul> in linea). $(data) sarebbe un array con 2 elementi che non è quello che si aspetta .dialog().

+0

Questa dovrebbe essere la soluzione. L'interfaccia utente di jQuery si aspetta che gli elementi si trovino in un determinato layout e si confondano quando non lo sono. –

+0

Giusto! Grazie per la risposta, aggiungo nel back-end il div e tutto funziona! –

+0

Ho avuto lo stesso problema e il wrapper div era la soluzione. In realtà per me il modulo veniva visualizzato, ma lo script si bloccava con lo stesso messaggio di errore subito dopo la visualizzazione del modulo. – alexg

Problemi correlati