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

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

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...