2011-09-14 18 views
6

Tengo una rutina jquery.ajax que llama a un script php. El script php realiza una búsqueda en la API de búsqueda de Google y devuelve json al script ajax llamante.jQuery.ajax devuelve error: Token inesperado con mensaje de error: parseerror?

embargo

El script funciona bien en el 99% de la instalación, versiones, en unos pocos, cuando llamo:

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

Devuelve:

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

¿Cómo puedo solucionar esto usando javascript consola o herramientas de desarrollo de Chrome? talón de código está por debajo ...

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; 
    } 
}); 

ACTUALIZACIÓN: lee Error de objeto de CONSOLE.LOG:

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

Parece que tienes malformado a json que vuelve. El '<' daría a entender que tal vez se trata de una etiqueta html alrededor del json? –

+0

¿Qué localidad? ¿Cuál es la URL que disparas para el regreso de json? ¿Tal vez obtienes XML en su lugar? Por favor brinde más información. – hakre

+0

@hakre: gracias por consultar esto. Acabo de actualizar la pregunta. – RegEdit

Respuesta

11

Es probable que tenga HTML regresar donde no se suponía que era para el JSON.

Trate console.log(arguments); antes de la alerta para ver lo que se devuelve

+0

Gracias Neal, cuando veo la consola javascript después de insertar eso, obtengo lo que parece ser el mismo mensaje: [Objeto, "parseerror", SyntaxError] – RegEdit

+0

@RegEdit - mira lo que está en el 'Objeto' – Neal

+0

+ 1 Neal, ahora tengo algunas pistas. Acabo de actualizar la pregunta con el resultado. – RegEdit

0

Esto le indicará dónde se está

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" 

más probable es que el problema en algunas instalaciones se comporta de manera diferente debido a diversas error_reporting configuración

En entornos de producción, los informes de errores deben estar desactivados, pero como regla general, su código nunca debe emitir ninguna advertencia o aviso.

En cualquier caso se debe manejar sus errores mejor, especialmente en

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 

Tanto estas advertencias son causados ​​por el hecho de que la variable no es una matriz (tal vez falsa o nula), por lo general esto se puede solucionar con una verificación is_array antes de acceder a la matriz o por siempre comprobando el valor de retorno de todas las funciones.

Cuestiones relacionadas