2011-05-27 9 views
5

Estoy usando wordpress. Hago una llamada ajax con jQuery, PHP echos un objeto JSON, pero la respuesta que recibo en javascript tiene un "0" agregado al final que hace que la decodificación del objeto json falle.¿Persona perdida en la respuesta de Ajax?

PHP:

function newspaper_getpost() { 
    $d = array('foo' => 'bar', 'baz' => 'long'); 
    echo json_encode($d); 
} 
add_action('wp_ajax_newspaper_getpost', 'newspaper_getpost'); 

JS:

$.post(MyAjax.ajaxurl,{ 
     action : 'newspaper_getpost', 
     postID : $(this).val() 
     }, function(response) { 
       console.log(response); 
    }); 

Salida:

{"foo":"bar","baz":"long"}0 

me trataron

echo substr(json_encode($d), 0, -1); 

y obtuvo

{"foo":"bar","baz":"long"0 

así que estoy seguro de que no es el lado de PHP. Podría dejar caer el "0" al final de la respuesta, pero siento que está sucediendo algo más grande y no quiero hacer un truco barato para que funcione. JQuery 1.6.1 por cierto. ¡Gracias!

+0

¿Está utilizando la última versión de jQuery o la versión * minor-major *? Editar: intente corregir la respuesta directamente en Chrome Inspector o Firebug y vea si la recibe de PHP o si es un problema de JS. –

+0

¿El '0' vestigial rompe tu código? Si no, lo dejaría solo. Podría ser una peculiaridad del navegador. – Blender

+0

Parece que el error proviene de algo después de add_action(). Además, asegúrate de decirle $ .post que recibirá json al completar el parámetro de tipo en la función de publicación. – Dormouse

Respuesta

3

Es obvio que hay un 0 completamente ajeno a esta pieza de javascript. Puede ver que cortó el último carácter de la respuesta y eliminó el }, pero el 0 permanece. Necesitas mirar el resto de tu PHP/HTML ya que hay un personaje perdido en alguna parte.

Si tuviera que agregar exit(); justo después del eco, verá que el 0 se va.

+0

Se agregó exit(); justo después del eco y se fue. ¡Gracias! – beardedlinuxgeek

0

probar este

function newspaper_getpost() { 
    $d = array('foo' => 'bar', 'baz' => 'long'); 
    die(json_encode($d)); 
} 
add_action('wp_ajax_newspaper_getpost', 'newspaper_getpost'); 
0

Eso significa que hay algo después de eco/dentro de su código php add_action('wp_ajax_newspaper_getpost', 'newspaper_getpost');. Busque print_r(), echo o algo similar.

Cuestiones relacionadas