2011-02-14 24 views
5

Quiero pasar los valores clave a la página php.json stringify a php

En la página php, comenzaré a leer el valor haciendo coincidir ajaxcallid.

Pero no funcionaba.

Tiene que ver con la sintaxis/forma en que estoy pasando, causando el error.

parse error 
invalid json: ajax call id is missing  

JavaScript/AJAX:

var person = { 
    "Address" : "123 Anywhere St.", 
    "City"  : "Springfield", 
    "PostalCode" : 99999 
}; 

alert(person);   

person= JSON.stringify(person); 

alert(person); 

$.ajax({ 
    url: 'ROOT_URL/admin/ajaxtest.php', 
    type: "POST", 
    dataType: 'json', 
    data: {ajaxcallid: '26', jsarr: person}, 
    timeout: 5000, 
    success: function(output) { 
     alert(output.Address); 
    }, 
}); 

PHP:

<?php 
if (isset($_REQUEST['ajaxcallid'])) 
{  
    if($_REQUEST['ajaxcallid']==26) 
    {  
     //example, I want to read value of person.Address, person.City, 
     //person.PostalCode 
    //what is the easiest way 
     $phparr= json_decode($_REQUEST['jsarr']); 
     //do all other operation 
     $output= json_encode($phparr); 
    } 
} 
else 
{ 
    $output= "ajax call id is missing"; 
} 
echo $output; 
?> 
+0

favor volcar su '$ phparr' justo antes de la codificación como JSON y pegue la salida. – BoltClock

Respuesta

0

no he trabajado con PHP pero desde mi experiencia con ASP.net siguiente puede ayudarle.

Añadir contentType clave para settigns ajax:

type: "POST", 
contentType:'application/json', 
dataType: 'json', 

También creo que necesita para stringify valor entero está asignando a data así:

var person = { 
    "Address" : "123 Anywhere St.", 
    "City"  : "Springfield", 
    "PostalCode" : 99999 
}; 

var d= {ajaxcallid: '26', jsarr: person}; 
var dat=JSON.stringify(d); 


...... 
data: dat, 
...... 
5

Voy a tomar una conjetura y di que NO DEBES codificar nada. Creo que JQuery hará eso por ti. A saber, ninguna persona = JSON.stringify (persona). Pruébalo.

+1

totalmente de acuerdo. ¿Por qué encapsularía los parámetros de stringified en un objeto y luego los enviaría a través de ajax, cuando jquery pasa un OBJETO de parámetros? –

+1

max_input_vars en PHP 5.3.9. limita la entrada de vars a 1000 si tiene un gran archivo json, entonces puede darle una advertencia de PHP. – tiltdown

3

Esto es lo que su $.ajax llamada y el lado PHP debe ser similar:

jQuery

$.ajax({ 
    url: "/admin/ajaxtest.php", 
    method: "POST", 
    data: { 
     ajaxcallid: "26", 
     person: JSON.stringify({ 
      "Address" : "123 Anywhere St.", 
      "City" : "Springfield", 
      "PostalCode" : "99999" 
     }) 
    } 
}).done(function(data) { 
    if (!data) { 
     // generic error message here 
    } else if (data == 'invalid') { 
     alert('no ajaxcallid received'); 
    } else { 
     var result = $.parseJSON(data); // if you pass back the object 
     alert(result.Address); 
    } 
}); 

PHP

if (isset($_REQUEST['ajaxcallid'])) { 
    if ((int) $_REQUEST['ajaxcallid'] == 26) { 
     $personData = json_decode($_REQUEST['person']); 
     $address = $personData->Address; 
     $postalCode = $personData->PostalCode; 
     $returnData = json_encode($personData); 
     echo $personData; 
     die(); 
    } 
} else { 
    echo 'invalid'; 
    die(); 
} 
6

Esto me ayudó:

data = json_decode($this->request->data['jsarr'], true); 

en su código PHP para acceder al registro

esperan que ayude a alguien!

16

Si no está utilizando tipoDatos: 'json', es posible que tenga que hacer stripslashes

$.post(window.data.baseUrl, {posts : JSON.stringify(posts)}); 

Y en php:

$posts = json_decode(stripslashes($_POST['posts']));