我想在本地实现一个简单的
AJAX函数,允许我在用户输入时自动完成现有节点的节点标题.为此,我需要能够拥有可以在节点标题上搜索的API.问题是当我输出原始
JSON时,它被标签包围.所以,无论我做什么,我都会……
- <html>
- <head>
- </head>
- <body>
- <pre style="word-wrap: break-word; white-space: pre-wrap;"> {json here}</pre>
- </body>
- </html>
我已经尝试实现一个自定义页面模板,它只输出内容,产生相同的结果.以下是我目前在模块文件中执行此操作的方法…
- <?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);
- }
如何返回JUST原始JSON?
‘Drupal’的方式是使用
drupal_json_output()
和
drupal_exit()
.
- $data = db_query("SELECT nid,array(":title" => $term.'%'))->fetchAll();
- drupal_json_output($data);
- drupal_exit();
UPDATE
我只是把你的代码放到一个模块中,当我请求http://site.com/api是预期的JSON时,我得到的就是没有标签.这个问题与Drupal无关,更可能与服务器/浏览器配置有关.
此链接可能有所帮助:
What do browsers want for the Content-Type header on json ajax responses?