Chciałbym zaimplementować lokalnie prostą funkcję AJAX, która pozwala mi na autouzupełnianie tytułów węzłów już istniejących węzłów jako typów użytkowników. W tym celu potrzebuję możliwości posiadania interfejsu API, który można wyszukiwać w tytułach węzłów. Problem polega na tym, że kiedy wypisuję surowy JSON, jest on otoczony tagami. Więc bez względu na to, co robię, ciągle otrzymuję ...
<html>
<head>
</head>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;"> {json here}</pre>
</body>
</html>
Próbowałem zaimplementować niestandardowy szablon strony, który wyświetla tylko treść, która dawała takie same wyniki. Oto jak obecnie to robię w moim pliku modułu ...
<?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);
}
Jak mogę zwrócić JUST JSON raw?
nodes
ajax
javascript
json
rybosome
źródło
źródło
drupal_json_output
funkcję. Zobacz tutaj lub tam, aby zobaczyć przykłady działania.Odpowiedzi:
W przypadku Drupal 6 możesz użyć drupal_json
W przypadku Drupal 7 zmień go na drupal_json_output
Prawdopodobnie bezpieczniej byłoby również przeanalizować zapytanie w celu dezynfekcji, kontroli błędów itp. Zamiast po prostu zwracać wynik.
źródło
Widziałem, że nie ma odpowiedzi na Drupal 8.
Aby przetworzyć JSON w Drupal 8, użyj następującego kodu:
Możesz przeczytać więcej na ten temat tutaj
źródło
Oto prawdziwy przykład z życia Drupala 8
https://github.com/npinos/drupal8-greenhouse
Obejmuje kontroler i routing
Ten kod zwraca liczbę węzłów w formacie json ujawnioną jako punkt końcowy
źródło