2011-09-14 25 views
6

Ho una routine jquery.ajax che chiama uno script php. Lo script php esegue una ricerca nell'API di ricerca di Google e restituisce json allo script ajax chiamante.jQuery.ajax restituisce errore: token imprevisto con messaggio di errore: parseerror?

Lo script funziona bene su 99% delle installazioni, tuttavia, su alcuni, quando chiamo:

error: function(jqXHR, textStatus, errorThrown){ 
alert('HTTP Error: '+errorThrown+' | Error Message: '+textStatus); 
} 

Restituisce:

HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror

Come posso risolvere questo utilizzando JavaScript console o strumenti di sviluppo di Chrome? Codice stub è inferiore ...

var result=''; 
jQuery.ajax 
({ 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    url: <?php echo '"' .plugins_url('/script.php', __FILE__); ?>?Query="+ jQuery('#search_keyword').val(), 
    success: function(data) 
    {  
     //do something with results 
    }, 

    error: function(jqXHR, textStatus, errorThrown){ 
     console.log(arguments); 
     alert('HTTP Error: '+errorThrown+' | Error Message: '+textStatus); 
     return; 
    } 
}); 

UPDATE: Errore oggetto di console.log legge:

responseText: "<br />↵<b>Warning</b>: array_map() [<a href='function.array-map'>function.array-map</a>]: Argument #2 should be an array in <b>/filepath/wp-content/plugins/test/test.php</b> on line <b>75</b><br />↵<br />↵<b>Warning</b>: Invalid argument supplied for foreach() in <b>/filepath/wp-content/plugins/test/test.php</b> on line <b>90</b><br />↵No Records Returned. Search may be down. Wait a few minutes" 
+0

Sembra che tu abbia malformato JSON tornare. Il simbolo <

+0

Quale locale? Qual è l'URL che licenzi per il ritorno di JSON? Forse ottieni XML invece? Si prega di fornire maggiori informazioni. – hakre

+0

@hakre: grazie per averlo verificato. Ho appena aggiornato la domanda. – RegEdit

risposta

11

Probabilmente avete HTML tornare dove non avrebbe dovuto per il JSON.

Prova console.log(arguments); prima che l'avviso di vedere ciò che viene restituito

+0

Grazie Neal, quando visualizzo la console javascript dopo averlo inserito, ottengo quello che sembra essere lo stesso messaggio lì: [Object, "parseerror", SyntaxError] – RegEdit

+0

@RegEdit - guarda cosa c'è nell'oggetto ' – Neal

+0

+ 1 Neal, ora ho alcuni indizi. Ho appena aggiornato la domanda con il risultato. – RegEdit

0

Questo vi dico dove è il problema è

responseText: "<br />↵<b>Warning</b>: array_map() [<a href='function.array-map'>function.array-map</a>]: Argument #2 should be an array in <b>/filepath/wp-content/plugins/test/test.php</b> on line <b>75</b><br />↵<br />↵<b>Warning</b>: Invalid argument supplied for foreach() in <b>/filepath/wp-content/plugins/test/test.php</b> on line <b>90</b><br />↵No Records Returned. Search may be down. Wait a few minutes" 

molto probabilmente in alcune installazioni si comporta in modo diverso a causa di diverse error_reporting impostazioni

Negli ambienti di produzione la segnalazione degli errori dovrebbe essere disattivata, ma come regola generale il codice non dovrebbe mai emettere alcun avviso o avviso.

In ogni caso si dovrebbe gestire i vostri errori meglio soprattutto in

Argument #2 should be an array in /filepath/wp-content/plugins/test/test.php on line 75 
Invalid argument supplied for foreach() in /filepath/wpcontent/plugins/test/test.php on line 90 

Entrambi questi avvertimenti sono causati dal fatto che la variabile non è un array (forse false o nullo), di solito questo può essere fissato con un controllo is_array prima di accedere all'array o tramite sempre controllando il valore restituito di tutte le funzioni.

Problemi correlati