Drupal kullanarak gerçek JSON'u nasıl iade edebilirim?


13

Yerel olarak basit bir AJAX işlevini yerel olarak uygulamak istiyorum. Bu amaçla, düğüm başlıklarında arayabileceğim bir API'ye sahip olma yeteneğine ihtiyacım var. Sorun ben ham JSON çıktı, etiketleri ile çevrili geliyor olmasıdır. Yani, ne yaparsam yapayım ...

<html>
    <head>
    </head>
    <body>
        <pre style="word-wrap: break-word; white-space: pre-wrap;"> {json here}</pre>
    </body>
</html>

Aynı sonuçları üreten, yalnızca zaten içerik çıkaran özel bir sayfa şablonu uygulamayı denedim. Modül dosyamda şu anda bunu nasıl yapıyorum ...

<?php

/**
 * Implementation of hook_menu()
 */
function content_relation_menu() {
    $items = array();
    $items['api'] = array(
        'title' => 'Search',
        'page callback' => 'content_relation_get',
        'access callback' => TRUE,
        'type' => MENU_CALLBACK,
    );

    return $items;
}

function content_relation_get($term = '') {
    drupal_add_http_header('Content-Type', 'application/javascript; utf-8');
    $var = json_encode(
        db_query("SELECT nid,title FROM {node} WHERE title LIKE :title LIMIT 5", array(":title" => $term.'%'))->fetchAll()
    );
    echo $var;
    exit(0);
}

SADECE ham JSON'u nasıl iade edebilirim?


drupal_json_outputİşlevi istiyorsunuz . Çalışma örnekleri için buraya veya oraya bakın .
keithm

Bazı biri Drupal 7 için örnek gösterebilir
Patrick W. McMahon

Yanıtlar:


17

Drupal 6 için drupal_json kullanabilirsiniz

function content_relation_get($term = '') {
    $result = db_query("SELECT nid,title FROM {node} WHERE title LIKE :title LIMIT 5", array(":title" => $term.'%'))->fetchAll()
    );
    drupal_json($result);
    exit;
}

Drupal 7 için drupal_json_output kullanmak üzere değiştirin

function content_relation_get($term = '') {
    $result = db_query("SELECT nid,title FROM {node} WHERE title LIKE :title LIMIT 5", array(":title" => $term.'%'))->fetchAll()
    );
    drupal_json_output($result);
    drupal_exit();
}

Ayrıca, yalnızca sonucu döndürmeye çalışmak yerine sorguyu sterilize etmek, hata kontrolü vb. İçin ayrıştırmak da daha güvenli olacaktır.


2
Hızlı bir not: JSON yazdırıldıktan sonra genellikle exit () yerine drupal_exit () kullanılması tercih edilir.
geerlingguy

2
@geerlingguy İyi yakalama; fark etmedi. Farkı bilmeyenler için, drupal_exit () çağrısı hook_exit () 'i çağırır, oturumu
yıkar

3

Drupal 8 için cevap bulunmadığını gördüm.

JSON'u Drupal 8'de işlemek için aşağıdaki kodu kullanın:

  <?php
     use Symfony\Component\HttpFoundation\JsonResponse;
     // ...
     $options = _menu_get_options(menu_get_menus(), $available_menus, array('mlid' => 0));
     return new JsonResponse($options);
  ?>

Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.