jQuery AJAX PHP JSON sorun

4 Cevap php

Ben şu şekilde bir AJAX isteği ne zaman ben bir empty array alma sorunu ile karşı karşıya ediyorum:

Bu benim JavaScript yürütme kulüpler kodu:

  <script type="text/javascript" src="lib/jquery.js"></script>
  <script type="text/javascript" src="lib/jquery.json.js"></script>
  <script type="text/javascript">   
   $(document).ready(function(){

    /* Preparar JSON para el request */
    var mJSON = new Object;
    mJSON.id_consulta = new Array;
    for (var i=0; i<3; i++){
     mJSON.id_consulta[i] = new Object;
     mJSON.id_consulta[i].id = i;
    }
    var sJSON = $.toJSON(mJSON); 

    $.ajax({
     type: "POST",    
     url: "getUbicaciones.php",  
     data: sJSON, 
     dataType: "json", 
     contentType: "application/json; charset=utf-8",              
     success: function(respuesta){  
      alert(respuesta);
     },
     error: function (request,error){
      alert("Error: " + request.statusText + ". " + error);
     }
    });  

   });
  </script>

Ve bu PHP altında kodu:

 <?php 
 /* Decodificar JSON */
 $m_decoded = $_POST;

 print_r($m_decoded);
 exit;
 ?>

Ve ben bu aldığım tüm Chrome'un Geliştirici Araçları kullanarak boş bir dizidir:

Array
(
)

Ben yanlış ne yapıyorum herhangi bir ipucu var mı?

Dize sJSON doğru kodlanmış ediliyor, bu ben o konuda bir "uyarı" ne zaman ne olsun:

{"id_consulta":[{"id":1},{"id":2},{"id":3}]}

Şimdiden herkese teşekkürler!

4 Cevap

Nihayet o iş yaptı!. Bu gibi gitti:

JavaScript:

var sJSON = $.toJSON(mJSON.id_consulta);


            $.ajax({
                type: "POST",    
                url: "getUbicaciones.php",  
                data: "json=" + sJSON,                  
                processData: false,             
                success: function(respuesta){       

                },
                error: function (request,error){

                }
            }); 

PHP:

$m_decoded = json_decode(stripslashes($_POST["json"])); 

Ben JSON dize "karakteri için bölü beri" stripslashes "kullanmak zorunda olduğunu unutmayın.

Ben bu başkası yardımcı olur umarım, tüm yardımlarınız için herkese teşekkür ederim.

Lütfen JavaScript itibaren, anahtar-değer çiftleri olarak, bu gibi verileri aktarmak gerekir:

data: {"mydata" : sJSON},

PHP tarafında, $_POST bir ilişkisel dizidir beri o yüzden gibi verilerinize erişebilir:

$m_decoded = $_POST['mydata'];

PHP tarafında JSON çözme değil.

Try json_decode

Çeşitli konularda kodunuzu vardır:

  1. Sen dataType: "json" ilan edilir, ancak sunucu JSON dönmek değil, düz metin döndürür. Kimden documentation:

    Eğer sunucudan expecting back konum veri türü. Hiçbiri belirtilmemişse, jQuery akıllıca 1.4 komut komut dosyasını çalıştırır, 1.4 JSON JavaScript nesnesine verecektir, bir XML MIME tipi XML verecektir (yanıtın MIME türüne göre, sonuçlar elde etmeye çalışmak, ve bir şey olacak Başka) bir dizge olarak iade edilecektir.

  2. JQuery başarılı bir sorgu dizesi verileri dönüştürmek olduğunu sanmıyorum. Nesnelerin bir dizi göndermek için çalışıyoruz:

    {"id_consulta":[{"id":1},{"id":2},{"id":3}]}
    

    Use Firebug and examine which data is actually sent. If you want to send the whole string as JSON, you have to set the processData option to false:

    $.ajax({
       type: "POST",    
       url: "getUbicaciones.php",  
       data: "json=" + $.toJSON(mJSON.id_consulta), 
       processData: false,
       //....
    

    ve sunucu tarafında dize şifresini çözmek zorunda:

    $data = json_decode($_POST['json']);