2012-06-08 20 views
21

Voglio inviare alcuni dati in formato json su php e fare qualche operazione in php. Il mio problema è che non posso inviare dati json via ajax al mio file php. Per favore aiutatemi come posso farlo. Ho provato questo modo ..Invio 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> 

E in PHP che uso:

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

Quando in add print_r ($ _ POST) in file php, mostra array (0) {} in Firebug.

+0

Rimuovere l'applicazione 'contentType:"/json; charset = utf-8 ",'. –

risposta

32

perdono la contentType: "application/json; charset=utf-8",. Non stai inviando JSON al server, stai inviando una normale query POST (che per caso contiene una stringa JSON).

Questo dovrebbe rendere ciò che funziona.

Questo è, non è necessario utilizzare JSON.stringify o json_decode qui affatto. Basta fare:

data: {myData:postData}, 

Poi in PHP:

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

Quindi, se sto mandando json al server ? come lo ricevo? E perché differisce da MVC.NET? – Ayyash

+0

@Ayyash: Se tu avessi inviato JSON, dovresti leggere i dati di input non elaborati (da 'php: // input'). Non so nulla su MVC.NET, quindi non posso rispondere. –

+0

o forse è un problema IIS vs Apache? Io uso la stessa funzione ajax in entrambi, ma in .NET ho appena catturato Request.Post, in PHP che non funziona, né php: // input per qualche ragione, l'unica cosa che funzionava era passare gli attributi della stringa di query e usando $ _REQUEST ... che fa male – Ayyash

13

Questo perché $_POST è precompilato con i dati del modulo.

Per ottenere dati JSON (o qualsiasi input non elaborato), utilizzare php://input.

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

Se avessi intenzione di farlo, non avrei usato jQuery, per esempio .Per altro, farei tutto manualmente. –

4

Credo che si potrebbe provare qualcosa di simile:

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 codifica JSON dovrebbe avvenire automaticamente, e un dump del tuo post dovrebbe darti qualcosa del tipo:

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

Perdere il 'contentType:" application/json; charset = utf-8 ",'. Stai 'POST's una stringa di query standard, non JSON. Quindi 'print_r ($ _ POST)' dovrebbe darti la matrice che mostri. –

2

basta rimuovere:

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

Probabilmente dovresti mantenere 'dataType:" json ",', questo è il tipo di dati restituito dal server. –

+0

sì è vero, ma json deve essere restituito per evitare un altro errore –

+0

Presumo che l'OP restituisca JSON, ma non l'ho mostrato. Non penso che ci sarebbe un errore se non restituissi nulla. Riceverai solo un errore se quello che hai restituito non era JSON. –

1

Si tryng inviare js array con formato oggetto js.

Invece di utilizzo

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

prova:

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

Per inviare javascript obj a PHP utilizzando JSON e 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); 
    } 
}); 

di utilizzare tale oggetto in PHP:

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

echo $obj->var;