2011-11-27 12 views
5

Tengo un script de AJAX que enviar datos en uno de mi archivo PHP:¿Por qué no puedo publicar mis datos JSON utilizando AJAX en mi archivo PHP?

 var _lname = $('#ptLastName').val(); 
    var _fname = $('#ptFirstName').val(); 
    var _mname = $('#ptMiddleName').val(); 
$.ajax({ 
       type: "POST", 
       url: ".././CheckPerson.php", 
       data: "{'lastName':'" + _lname + "','firstName':'" + _fname + "','middleName':'" + _mname + "'}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (response) { 
        var res = response.d; 
        if (res == true) { 
         jAlert('Person Name already exists!', 'Error'); 
         return; 
        } 

Trabaja muy bien y puedo ver los datos JSON ha escrito en la consola de Firebug. El problema es con el código PHP:

$firstname = json_decode($_POST['firstName']); 
$lastname = json_decode($_POST['lastName']); 
$middlename = json_decode($_POST['middleName']); 
$response = array(); 

el código PHP anterior parece que no puede reconocer la 'firstName', 'lastName' y 'middleName' como parámetro JSON publicado, y devolver una Undefined index: firstName in C:... algo así por todo el publicado parámetros.

También intenté usar $data = $_POST['data'] y $_REQUEST['data'] para obtener todos los parámetros JSON y decodificarlo usando json_decode($data); pero no funcionó.

También he utilizado el código acortado AJAX para post $.post('.././CheckPerson.php', {data: dataString}, function(res){ });, funciona muy bien con mi archivo PHP y mi archivo PHP ahora puede leer lastName, firstName y middleName, pero yo creo que no a datos JSON, pero sólo una es datos de texto porque firebug no puede leerlo como datos JSON. Ahora, estoy confundido sobre cómo mi archivo PHP leerá los parámetros de datos JSON. ¿Tienen alguna sugerencia sobre esto?

Respuesta

7

El problema es que dataType: "json" no quiere decir que usted está enviando JSON, pero que está esperando recibir datos JSON desde el servidor como resultado de su solicitud. Usted puede cambiar sus datos de envío a:

data: {myPostData : "{'lastName':'" + _lname + "','firstName':'" + _fname + "','middleName':'" + _mname + "'}"} 

y luego analizarlo en su servidor como

$myPostData = json_decode($_POST['myPostData']); 
$firstname = $myPostData["firstName"]; 
$lastname = $myPostData["lastName"]; 
$middlename = $myPostData["middleName"]; 
2

Un problema: está utilizando comillas simples para su json. Deberías usar comillas dobles (de acuerdo con las especificaciones).

{"lastName":"Smith", "firstName":"Joe"} 

instead of 

{'lastName':'Smith', 'firstName':'Joe'} 
Cuestiones relacionadas