2012-04-02 21 views
5

Estoy intentando enviar varias variables desde un archivo php a ajax usando json en una matriz. El código en el archivo php funciona perfectamente y hace todo con mi base de datos como debería. Pero tan pronto como agrego dataType: "json" en ajax, ya no pasa nada en el archivo php. Busqué en Google un poco y algunas personas mencionaron que podría ser un problema del navegador, pero hasta ahora no funciona en Firefox, Chrome o IE. Estoy usando la última versión de jQuery.dataType: "json" no funcionará

Esto es lo que sucede dentro de php:

<?php 
//Create variables and update database 

echo json_encode(array("id" => "$realid", "un" => "$username", "date" => "$date")); 
?> 

Y este es el código de Ajax:

.ajax(
{ 
    url: 'UpdateComments.php', 
    type: 'POST', 
    dataType: "json", 
    data: 
    { 
     type: "add", 
     comment: $("#comment").val(), 
     id: videoID 
    }, 
    success: function (data) 
    { 
     //Get the data variables from json and display them on page 
    } 
}); 

no tengo ni idea de esto, cualquier consejo sería muy apreciada!

+0

comprobar la respuesta Ajax en firebug/panel de red y ver lo que viene de tu servidor –

+0

Un encabezado HTTP contentType puede ayudar – Bergi

+1

Sospecho que lo que se devuelve no es estrictamente JSON - compruebe si hay espacio en blanco antes o después de su PHP, o cualquier otra cosa en el archivo que no debería estar allí (pista: use 'die' justo después de json_encode) Cuando no especifica el tipo de datos en JQuery, éxito = obteniendo una respuesta. Cuando lo haga, éxito = obteniendo una respuesta VÁLIDA .... También verifique su versión PHP, me parece recordar que json_encode fue interceptado en una versión anterior. – Codecraft

Respuesta

6

El problema común es que el navegador imprime "algo más" antes de JSON, ya sea que sea legible o ilegible (invisible) char. Trate de hacer algo como esto:

<?php 
//at the very beginning start output buffereing 
ob_start(); 

// do your logic here 

// right before outputting the JSON, clear the buffer. 
ob_end_clean(); 

// now print 
echo json_encode(array("id" => $realid, "un" => $username, "date" => $date)); 
?> 

Ahora, se descartarán todos los datos antes de suplemento (JSON) y que no debería tener que trabajar ...

+0

¡Gracias, esto funcionó! – Glenn

0

Si configura el tipo de datos en jQuery, eso realmente configura el atributo de encabezado Content-Type. Quizás, en su script PHP necesitará declarar este tipo MIME como aceptado. ¿Notaste si el código incluso ingresa el script PHP cuando haces la solicitud? Dudo que sea un problema del navegador si no funciona en Firefox, Chrome o IE.

Para obtener una mejor perspectiva de su solicitud de AJAX, suscríbase al evento ajaxBeforeSend (no estoy seguro si el nombre del evento es correcto, consulte jQ docs) y registre el objeto xhr.

0

No usaría el tipo de datos si le está causando problemas, ¿pero personalmente no he usado un objeto como el valor de los datos que quizás tenga algo que ver con eso?

De todos modos, he ajustado la rutina principal de Ajax, espero que esto ayude.

$.ajax(
{ 
    url: 'UpdateComments.php', 
    type: 'POST', 
    data: 
    { 
     type: "add", 
     comment: $("#comment").val(), 
     id: videoID 
    }, 
    success: function (response) 
    { 
     //Get the data variables from json and display them on page 
     var data = $.parseJSON(response); 
     alert(data.id); 
    } 
}); 
1

Creo que si se utiliza tipo de datos que debe utilizar contentType, "El tipo oficial de los medios de comunicación de Internet para JSON es application/json".

.ajax(
{ 
url: 'UpdateComments.php', 
type: 'POST', 
contentType: "application/json",//note the contentType defintion 
dataType: "json", 
data: 
{ 
    type: "add", 
    comment: $("#comment").val(), 
    id: videoID 
}, 
success: function (data) 
{ 
    //Get the data variables from json and display them on page 
} 
}); 
0

Tratar de definir el gestor de errores como parte de la llamada $ .ajax

$.ajax({ 
    ..., 
    error: function(xml, error) { 
    console.log(error); 
    } 
}); 

A continuación, compruebe su consola de depuración de los errores que pueden ayudar a diagnosticar el problema.