Gostaria de implementar localmente uma função AJAX simples que me permita preencher automaticamente títulos de nós já existentes conforme o usuário digita. Para isso, preciso ter uma API que possa pesquisar nos títulos dos nós. O problema é que quando eu produzo JSON bruto, ele é cercado por tags. Então, não importa o que eu faça, eu continuo recebendo ...
<html>
<head>
</head>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;"> {json here}</pre>
</body>
</html>
Eu tentei implementar um modelo de página personalizado que só gera conteúdo já, que produziu os mesmos resultados. Aqui está como atualmente estou fazendo isso, no meu arquivo de módulo ...
<?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);
}
Como posso retornar apenas o JSON bruto?
nodes
ajax
javascript
json
rybosome
fonte
fonte
drupal_json_output
função. Veja aqui ou ali para exemplos de trabalho.Respostas:
Para o Drupal 6, você pode usar drupal_json
No Drupal 7, altere-o para usar drupal_json_output
Provavelmente também seria mais seguro analisar a consulta para higienizar, verificar erros, etc., em vez de apenas tentar retornar o resultado.
fonte
Vi que não havia resposta para o Drupal 8.
Para processar JSON no Drupal 8, use o seguinte código:
Você pode ler mais sobre isso aqui
fonte
Aqui está um exemplo da vida real para o Drupal 8
https://github.com/npinos/drupal8-greenhouse
Inclui controlador e roteamento
Esse código retorna uma contagem de nós no formato json exposto como um terminal
fonte