我想在本地实现一个简单的
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?