JQuery AJAX PHP JSON проблема - PullRequest
6 голосов
/ 14 мая 2010

Я сталкиваюсь с проблемой получения пустого массива , когда я делаю AJAX-запрос следующим образом:

Это код, который я выполняю в JavaScript:

  <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>

А это код под PHP:

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

 print_r($m_decoded);
 exit;
 ?>

И все, что я получил от этого, используя Chrome Developer Tools, это пустой массив:

Array
(
)

Есть какие-нибудь подсказки, что я делаю не так?

Строка sJSON кодируется правильно, это то, что я получаю, когда делаю «предупреждение» о ней:

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

Спасибо всем заранее!

Ответы [ 4 ]

2 голосов
/ 14 мая 2010

Из вашего JavaScript вам нужно передать данные в виде пар ключ-значение:

data: {"mydata" : sJSON},

На стороне PHP, поскольку $ _ POST является ассоциативным массивом, к которому вы затем можете обращаться к своим данным, например:

$m_decoded = $_POST['mydata'];
1 голос
/ 14 мая 2010

Вы не декодируете JSON на стороне PHP.

Попробуйте json_decode

0 голосов
/ 15 мая 2010

Наконец-то заработало! Это было так:

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"])); 

Обратите внимание, что мне пришлось использовать "stripslashes", поскольку строка JSON содержала косую черту для символа ".

Спасибо всем за помощь, надеюсь, это поможет кому-то еще.

0 голосов
/ 14 мая 2010

В вашем коде есть несколько проблем:

  1. Вы объявляете dataType: "json", но сервер не возвращает JSON, он возвращает простой текст. Из документации :

    Тип данных, которые вы ожидаете от сервера . Если ничего не указано, jQuery будет интеллектуально пытаться получить результаты, основываясь на типе ответа MIME (тип XML MIME приведет к XML, в 1.4 JSON даст объект JavaScript, в 1.4 скрипт выполнит скрипт и все иначе будет возвращено как строка).

  2. Я не думаю, что jQuery может успешно преобразовать ваши данные в строку запроса. Вы пытаетесь отправить массив объектов:

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

    Используйте Firebug и проверьте, какие данные действительно отправляются. Если вы хотите отправить всю строку как JSON, вам нужно установить для параметра processData значение false:

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

    и вам нужно декодировать строку на стороне сервера:

    $data = json_decode($_POST['json']);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...