Как отобразить объект JSON, не заключая в кавычки? - PullRequest
0 голосов
/ 03 октября 2011

Впервые имеем дело с JSON.У меня есть php-файл, который обрабатывает post-переменные, отправленные ему через ajax, и затем он возвращает массив json_encoded.Я не могу повторить его, потому что он заключен в двойные кавычки.Как мне обойти это?

Код jquery:

$j.ajax({
   type: 'GET',
   url: 'http://example.com/doaction.php',
   data: 'num=' + fileNum[1],
   success: function(jsonobj) {
     for (var key in jsonobj) {
       if (jsonobj.hasOwnProperty(key)) {
         var jsonob = jsonobj[key];
         console.log(key + " = " + jsonob);
       }
     }
   }
});

Код php в doaction.php:

if ($_GET['num']) {
    $meta = file_meta($_GET['num']); // returns an array
    echo json_encode($meta);
}

file_meta function:

function file_meta($num = 1) {
$num = '_' . $num;
$meta = array(
    'filename' . $num => array(
        'value' => ''),
    'link' . $num => array(
        'value' => ''),
    'description_' . $num => array(
        'value' => ''),
    'metadata' => array(
        'type' => 'checkbox',
        'label' => 'Indicate applicable competencies:',
        'items' => array(
            'core_teaching' . $num => array(
                'label' => 'Core Teaching',
                'value' => 0
            ),
            'teaching_learning' . $num => array(
                'label' => 'Teaching Learning',
                'value' => 0
            ), 
            'instructional_design' . $num => array(
                'label' => 'Instructional Design',
                'value' => 0
            ), 
            'assignment_and_evaluation' . $num => array(
                'label' => 'Assignment & Evaluation',
                'value' => 0
            ),
            'research' . $num => array(
                'label' => 'Research',
                'value' => 0
            ),
            'mentoring' . $num => array(
                'label' => 'Mentoring',
                'value' => 0
            )   
        )
    )
);

return $meta;

}

Результат в консоли не тот, который я ожидал.Он должен быть в парах ключ-значение, но вместо этого, как показано ниже, это бессмысленно.

 500 = ,
 501 = "
 502 = v
 503 = a
 .
 .
 .

Я почти уверен, что это потому, что объект json, который получает $.ajax(), заключен в кавычки.Когда я присваиваю object без кавычек непосредственно jsonobj, я получаю правильный результат.Когда я вызываю file_meta () напрямую из функции $.ajax(), я получаю правильный результат:

var jsonobj = <?php $etc = file_meta(); echo json_encode($etc); ?>;
// iterate here...

Однако это не то, что я хочу, потому что file_meta() необходимо передать со значением из извлеченного элементапо событию клика.И отправка через $ _GET - единственное, что я знаю.

1 Ответ

4 голосов
/ 03 октября 2011

Используйте json_decode () для преобразования строки JSON в переменную PHP

$var = json_decode('{"file":{"test": 0}}');

В javascript используйте:

var decoded = eval('{"file":{"test": 0}}');

Если вы используете jQueryиспользование библиотеки:

var json = '{"file":{"test": 0}}';
var decoded = $.parseJSON(json);
...