2012-06-08 18 views
21

Deseo enviar algunos datos en formato json a php y realizar alguna operación en php. Mi problema es que no puedo enviar datos json a través de ajax a mi archivo php. Por favor, ayúdenme, ¿cómo puedo hacer eso? He tratado de esta manera ..Enviando JSON a PHP usando ajax

<script> 
$(function(){ 
$("#add-cart").click(function(){ 
    var bid=$('#bid').val(); 
    var myqty=new Array() 
    var myprice=new Array() 

    qty1=$('#qty10').val(); 
    qty2=$('#qty11').val(); 
    qty3=$('#qty12').val(); 

    price1=$('#price1').val(); 
    price2=$('#price2').val(); 
    price3=$('#price3').val(); 

    var postData = 
       { 
        "bid":bid, 
        "location1":"1","quantity1":qty1,"price1":price1, 
        "location2":"2","quantity2":qty2,"price2":price2, 
        "location3":"3","quantity3":qty3,"price3":price3 
       } 
    var dataString = JSON.stringify(postData); 

    $.ajax({ 
      type: "POST", 
      dataType: "json", 
      url: "add_cart.php", 
      data: {myData:dataString}, 
      contentType: "application/json; charset=utf-8", 
      success: function(data){ 
       alert('Items added'); 
      }, 
      error: function(e){ 
       console.log(e.message); 
      } 
    }); 
}); 
}); 
</script> 

Y en PHP que utilizo:

if(isset($_POST['myData'])){ 
$obj = json_decode($_POST['myData']); 
//some php operation 
} 

Cuando en el complemento print_r ($ _ POST) en el archivo PHP, muestra array (0) {} en Firebug.

+0

Elimina el 'contentType:" application/json; charset = utf-8 ",'. –

Respuesta

32

Pierde el contentType: "application/json; charset=utf-8",. No está enviando JSON al servidor, está enviando una consulta POST normal (que contiene una cadena JSON).

Eso debería hacer que tu trabajo funcione.

La cosa es que no necesita usar JSON.stringify o json_decode aquí en absoluto. Sólo hacer:

data: {myData:postData}, 

Luego, en PHP:

$obj = $_POST['myData']; 
+0

¿Qué ocurre si envío json al servidor? "¿cómo lo recibo? ¿Y por qué difiere de MVC.NET? – Ayyash

+0

@Ayyash: si estuviera enviando JSON, tendría que leer los datos de entrada sin procesar (de' php: // input'). No sé nada de MVC.NET, así que no puedo responder eso. –

+0

o tal vez es un problema de IIS vs Apache? Utilizo la misma función ajax en ambos, pero en .NET simplemente cojo Request.Post, en PHP no funciona, y php: // input por algún motivo, lo único que funcionaba era pasar los atributos de la cadena de consulta y usando $ _REQUEST ... duele – Ayyash

13

Eso es porque $_POST está rellenado previamente con datos del formulario.

Para obtener datos JSON (o cualquier entrada sin formato), use php://input.

$json = json_decode(file_get_contents("php://input")); 
+0

Si fuera a hacer esto, no estaría usando jQuery, por ejemplo. Por otro lado, estaría haciendo todo manualmente. –

4

creo que podría intentar algo como esto:

var postData = 
      { 
       "bid":bid, 
       "location1":"1","quantity1":qty1,"price1":price1, 
       "location2":"2","quantity2":qty2,"price2":price2, 
       "location3":"3","quantity3":qty3,"price3":price3 
      } 
$.ajax({ 
     type: "POST", 
     dataType: "json", 
     url: "add_cart.php", 
     data: postData, 
     success: function(data){ 
      alert('Items added'); 
     }, 
     error: function(e){ 
      console.log(e.message); 
     } 
}); 

la codificación JSON debe suceder automáticamente, y un volcado de su puesto debería darle algo como:

array(
    "bid"=>bid, 
    "location1"=>"1", 
    "quantity1"=>qty1, 
    "price1"=>price1, 
    "location2"=>"2", 
    "quantity2"=>qty2, 
    "price2"=>price2, 
    "location3"=>"3", 
    "quantity3"=>qty3, 
    "price3"=>price3 
) 
+0

Pierde la aplicación 'contentType:"/json; charset = utf-8 ",'. Estás 'POST' haciendo una cadena de consulta estándar, no JSON. Entonces 'print_r ($ _ POST)' debería darle la matriz que muestra. –

2

acaba de quitar:

... 
//dataType: "json", 
url: "index.php", 
data: {myData:postData}, 
//contentType: "application/json; charset=utf-8", 
... 
+1

Probablemente deberías mantener 'dataType:" json ",', ese es el tipo de datos que devuelve el servidor. –

+0

sí, es cierto, pero se debe devolver json para evitar otro error –

+0

Supongo que el OP devuelve JSON, pero simplemente no lo mostró. No creo que haya un error si no devolviste nada. Solo obtendría un error si lo que devolvió no fuera JSON. –

1

Usted está tryng para enviar JS matriz con formato de objeto js.

En lugar de utilización

var a = new array(); 
a['something']=... 

intento:

var a = new Object(); 
a.something = ... 
6

Para enviar Javascript obj a PHP usando JSON y ajax:

JS:

var dataPost = { 
    "var": "foo" 
}; 
var dataString = JSON.stringify(dataPost); 

$.ajax({ 
    url: 'server.php', 
    data: {myData: dataString}, 
    type: 'POST', 
    success: function(response) { 
     alert(response); 
    } 
}); 

utilizar ese objeto en php:

$obj = json_decode($_POST["myData"]); 

echo $obj->var; 
Cuestiones relacionadas