2010-10-28 2 views
1

Я пытаюсь декодировать JSON в php, я отправил его с помощью ajax-вызова в javascript (jquery).Json-декодирование в PHP

Javascript код:

var editSchedule_data = { 
     'action'   : 'editSchedule', 
     'eventid'   : $('#eventid').val(), 
     'pixels_per_minute' :$('#pixels_per_minute').val(), 
     artists: { 
      artist: [] 
     } 
    } 

    $('.artist').each(function(index) { 
     var id=$(this).attr('id'); 
     id=id.split('_'); 
     editSchedule_data.artists.artist.push({ 
      'artistid' : id[0], 
      'stageid'  : id[1], 
      'left'  : $(this).offset().left-$('.artists').offset().left, 
      'width'  : $(this).width() 
     }); 
    }); 

    $.ajax({ 
     type : "POST", 
     url : "callback.php", 
     data : editSchedule_data, 
     dataType : "json", 
     async : true, 
     success : function(json) { 
      if(json.success) { 
       showSucces(json.message); 

      } 
      else{ 
       showError(json.message); 
      } 
     }, 
     error: function(error){ 
      alert("An error occurred: "+error.message); 
     } 
    }); 

РНР-код:

$clean = sanitize($_POST); 

echo(json_encode($clean['artists']), 
json_last_error()); 

echo(json_decode($clean['artists']), 
json_last_error()); 

Мой выход: закодировать:

{"artist":[{"artistid":"4","stageid":"3","left":"360","width":"240"},{"artistid":"3","stageid":"4","left":"120","width":"240"},{"artistid":"1","stageid":"5","left":"120","width":"180"},{"artistid":"2","stageid":"5","left":"300","width":"120"},{"artistid":"5","stageid":"6","left":"480","width":"120"}]} 
0 

расшифровывает:

0 

Может ли кто-нибудь сказать мне, как заставить функцию декодирования работать?

+0

Что такое '$ decoded_json = json_decode ($ clean ['artist']); var_dump ($ decoded_json); '? –

ответ

2

Почему вы пытаетесь использовать json_decode? У вас уже есть данные в виде массива в $ _POST. Вот почему json_decode терпит неудачу и перенастраивает NULL ... он ожидает правильно сформированную строку, и вы передаете ей массив. Если параметр dataType: «json» смущает вас, он указывает тип данных, которые вы ожидаете от сервера, а не тип данных, которые вы отправляете. Вы просто обрабатываете данные из $ _POST, создаете свой ответ, применяете json_encode на нем и эхо отзыва строки.

1

json_decode($clean['artists']); дает вам объект, поэтому эхо его не показывает ничего. Попробуйте print_r(), чтобы увидеть, что внутри объекта:

// Will show you the whole PHP object 
print_r(json_decode($clean['artists'])); 
+0

print_r (json_decode ($ _ POST ['artist'])); switch (json_last_error()) { case JSON_ERROR_DEPTH: echo '- Максимальная глубина стека превышена'; break; case JSON_ERROR_CTRL_CHAR: echo '- Неожиданный символ управления найден;'; break; case JSON_ERROR_SYNTAX: echo '- ошибка синтаксиса, искаженный JSON'; break; case JSON_ERROR_NONE: echo '- No errors'; break; } дает мне: Предупреждение: json_decode() не ожидает параметр 1, чтобы быть строка, массив приведены в - нет ошибок – Vincent

1

гораздо лучше, если вы будете использовать это. при выборке данных из базы данных

$.getJSON("callback.php",function(json){ 
$('#div to update').html(json[0].databasefield); // 0 if query is only 1 result 
});         // when there are many of them use for loop 

на РНР вы должны кодировать его, используя json_encode (массив значений);

Смежные вопросы