如何使用Drupal返回实际的JSON?

ryb*_*ome 7 ajax json drupal drupal-7

我想在本地实现一个简单的AJAX函数,它允许我在用户输入时自动完成已存在节点的节点标题.为此,我需要能够拥有可以在节点标题上搜索的API.问题是当我输出原始JSON时,它被标签包围.所以,无论我做什么,我都会......

<html>
    <head>
    </head>
    <body>
        <pre style="word-wrap: break-word; white-space: pre-wrap;"> {json here}</pre>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我已经尝试实现一个只能输出内容的自定义页面模板,它会产生相同的结果.以下是我目前在模块文件中执行此操作的方法...

<?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);
}
Run Code Online (Sandbox Code Playgroud)

如何返回JUST原始JSON?

Cli*_*ive 9

'Drupal'方式正在使用drupal_json_output()drupal_exit().

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

drupal_json_output($data);

drupal_exit();
Run Code Online (Sandbox Code Playgroud)

UPDATE

我只是把你的代码放到一个模块中,我在请求时获得的http://site.com/api是预期的JSON,没有标签.这个问题与Drupal无关,更可能与服务器/浏览器配置有关.

此链接可能有所帮助:

浏览器对json ajax响应的Content-Type标头需要什么?