2015-01-06 8 views
6

Okay, quindi sto provando a estrarre i dati da un file JSON che contiene lo stato di alcuni LED, ecc. Ho uno script che viene eseguito alcune volte al secondo e carica i dati e la pagina Web lo carica. Il problema è che dopo circa 20 volte il server che legge il file JSON, alla fine genererà questo errore.SyntaxError: JSON.parse: fine dei dati inaspettata alla riga 1 colonna 1 dei dati JSON

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

// For toggling the LED/switch status indicators using the json data 
$(document).ready(function() { 
    (function worker() { 
     $.ajax({ 
      url: 'server_info.json', 
      success: function(data) { 
       var json = $.parseJSON(data); 
       console.log(json); 
       if (json.led_1 == "off") { 
        // do stuff 
       }   
       if (json.led_2 == "off") { 
        // do stuff 
       } 
       if (json.led_3 == "off") { 
        // do stuff 
       }   
      }, 
      complete: function() { 
       // Schedule the next request when the current one's complete 
       setTimeout(worker, 250); 
      } 
     }); 
    })(); 
}); 

Il file JSON assomiglia a questo:

{ "led_1": "on", "led_2": "on", "led_3": "on" } 

Mi sembra che i dati JSON è sempre formattata correttamente. Non capisco da dove viene l'errore. Qualche idea?

+0

O gettare un punto di interruzione all'inizio della funzione, o guardare il traffico di rete nella scheda di rete, e vedere ciò che i dati sembra come prima di un errore. Se succede solo una volta su 20, probabilmente il tuo codice va bene e i dati non devono essere inseriti correttamente. –

+1

Hai visto quali dati ci sono prima dell'errore? 'console.log (dati);' Sei sicuro che il server non restituisca qualcosa di diverso? – epascarello

+0

A volte ricevo una sessione che i file tmp cancellano il messaggio fallito dopo un paio di richieste. Forse qualcosa sta rovinando la risposta. – Mouser

risposta

3

Utilizzare l'impostazione "dataType" per identificare il tipo di risposta in modo che la chiamata .ajax() conosca il relativo JSON e non sia necessario indovinare.

Questo potrebbe non risolvere il problema in quanto è probabile che la risposta non stia restituendo JSON per la chiamata che genera l'errore. Se aggiungi l'impostazione di errore, puoi vedere cosa restituisce il server in caso di errore, ma se le richieste vengono completate, controlla la console per sapere cosa sta tornando dal server. Come ho detto, è probabile che non sia JSON se stai ricevendo quell'errore da $ .parseJSON() per cominciare.

$(document).ready(function() { 
    (function worker() { 
     $.ajax({ 
      url: 'server_info.json', 
      dataType: 'json', 
      success: function(data) { 
       console.log(data); 
       if (data.led_1 == "off") { 
        // do stuff 
       }   
       if (data.led_2 == "off") { 
        // do stuff 
       } 
       if (data.led_3 == "off") { 
        // do stuff 
       }   
      }, 
      error: function(data, status, error) { 
       console.log(data); 
       console.log(status); 
       console.log(error); 
      } 
      complete: function() { 
       // Schedule the next request when the current one's complete 
       setTimeout(worker, 250); 
      } 
     }); 
    })(); 
}); 
+0

Ho ricevuto questo errore quando la mia procedura php inviava una stringa vuota, console.log (output) mostrava una stringa vuota; l'errore era che il mio metodo php non veniva nemmeno chiamato e ancora ricevevo una stringa vuota. –

+0

qual è stato l'errore esatto che hai ricevuto? – zgr024

0

Utilizzando Firefox debugging, sono stato in grado di vedere che il tipo di valore di ritorno è stato definito quando avrei ottenere quell'errore. Effettuare un controllo per un valore null/non definito sul valore da analizzare per primo, quindi se la condizione è falsa, procedere con l'analisi, altrimenti gestire la condizione ha risolto il problema.

0

Dopo tanto tempo alla ricerca di una soluzione a questo problema e non trovando il modo di risolverlo, ho provato a modificare il mio file di configurazione mysql (my.ini) da solo nel modo seguente. E funziona!

L'unica cosa che ho fatto è quello di rimuovere il commento questo paragrafo:

## UTF 8 Settings 
init-connect=\'SET NAMES utf8\' 
collation_server=utf8_unicode_ci 
character_set_server=utf8 
skip-character-set-client-handshake 
character_sets-dir="C:/xampp/mysql/share/charsets" 
Problemi correlati