Javascript 使用jquery调用从SOLR检索结果

Javascript 使用jquery调用从SOLR检索结果,javascript,jquery,solr,Javascript,Jquery,Solr,我正在使用jquery从SOLR获得响应。当我使用下面的代码时,我得到的错误是Typeerror:data is null 查看firebug中的代码时,数据函数上的中的数据为空。我想我在Solr URL中遗漏了一些东西。我使用的URL是%3A&version=2.2&start=0&rows=10&indent=on&wt=json。 你能看一下我的代码,并建议我代码中的URL样式吗 <html> <head> <title>Solr Search&

我正在使用jquery从SOLR获得响应。当我使用下面的代码时,我得到的错误是Typeerror:data is null

查看firebug中的代码时,数据函数上的中的数据为空。我想我在Solr URL中遗漏了一些东西。我使用的URL是%3A&version=2.2&start=0&rows=10&indent=on&wt=json。 你能看一下我的代码,并建议我代码中的URL样式吗

<html>
<head>
    <title>Solr Search</title>
</head>
<body>
    <h3>Solr Search</h3>

    Query: <input id="query" /> 
    <button id="search">Search</button>
    <hr/>
    <div id="results">
    </div>
</body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
    function on_data(data) {
        $('#results').empty();

        var docs = data.response.docs;
        $.each(docs, function(i, item) {
            $('#results').prepend($('<div>' + item.name + '</div>'));
        });

        var total = 'Found ' + docs.length + ' results';
        $('#results').prepend('<div>' + total + '</div>');
    }

    function on_search() {
        var query = $('#query').val();
        if (query.length == 0) {
            return;
        }

        var url='http://xxxx.xxx.xxxx.xxx/xxx_xxx/core0/selectcore0/select/?q='+query+'&version=2.2&start=0&rows=50&indent=on&wt=json';
        $.getJSON(url, on_data);
    }

    function on_ready() {
        $('#search').click(on_search);
        /* Hook enter to search */
        $('body').keypress(function(e) {
            if (e.keyCode == '13') {
                on_search();
            }
        });
    }

    $(document).ready(on_ready);
</script>

Solr搜索
单色搜索
查询:
搜寻

_数据上的函数(数据){ $(“#结果”).empty(); var docs=data.response.docs; $。每个(文档、功能(i、项目){ $('#results')。前置($(''+item.name+''); }); var total='Found'+docs.length+'results'; $(“#结果”)。前置(“”+总计+“”); } _search()上的函数{ var query=$('#query').val(); if(query.length==0){ 返回; } var url='1〕http://xxxx.xxx.xxxx.xxx/xxx_xxx/core0/selectcore0/select/?q=“+query+”&version=2.2&start=0&rows=50&indent=on&wt=json'; $.getJSON(url,在_数据上); } _ready()上的函数{ $(“#搜索”)。单击(在#搜索上); /*钩住输入进行搜索*/ $('body')。按键(功能(e){ 如果(e.keyCode=='13'){ 关于搜索(); } }); } $(文件).ready(on_ready);

由于您使用的是$.getJSON,您可能需要向查询中添加&wt=json

因此,您的查询应该是:

默认情况下,Solr提供XML响应。您需要通过添加&wt=JSON来指定是否需要JSON响应


模式详细信息:

以下是代码的工作版本和更改列表: 1)添加了wrf:在JSON响应周围添加了一个包装函数,在AJAX中使用动态脚本标记指定JavaScript回调函数非常有用 2)添加了回调:由于JavaScript的跨域安全限制,需要使用JSONP而不是普通的JSON请求

<html>
<head>
    <title>Solr Search</title>
</head>
<body>
    <h3>Solr Search</h3>

    Query: <input id="query" /> 
    <button id="search">Search</button>
    <hr/>
    <div id="results">
    </div>
</body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
    function on_data(data) {
        $('#results').empty();
        var docs = data.response.docs;
        $.each(docs, function(i, item) {
            $('#results').prepend($('<div>' + item.name + '</div>'));
        });

        var total = 'Found ' + docs.length + ' results';
        $('#results').prepend('<div>' + total + '</div>');
    }

    function on_search() {
        var query = $('#query').val();
        if (query.length == 0) {
            return;
        }

        var url='http://xxxx.xxx.xxxx.xxx/xxx_xxx/core0/selectcore0/select/?q='+query+'&version=2.2&start=0&rows=50&indent=on&wt=json&callback=?&json.wrf=on_data';
        $.getJSON(url);
    }

    function on_ready() {
        $('#search').click(on_search);
        /* Hook enter to search */
        $('body').keypress(function(e) {
            if (e.keyCode == '13') {
                on_search();
            }
        });
    }

    $(document).ready(on_ready);
</script>

单色搜索
单色搜索
查询:
搜寻

_数据上的函数(数据){ $(“#结果”).empty(); var docs=data.response.docs; $。每个(文档、功能(i、项目){ $('#results')。前置($(''+item.name+''); }); var total='Found'+docs.length+'results'; $(“#结果”)。前置(“”+总计+“”); } _search()上的函数{ var query=$('#query').val(); if(query.length==0){ 返回; } var url='1〕http://xxxx.xxx.xxxx.xxx/xxx_xxx/core0/selectcore0/select/?q=“+query+”&version=2.2&start=0&rows=50&indent=on&wt=json&callback=?&json.wrf=on_data”; $.getJSON(url); } _ready()上的函数{ $(“#搜索”)。单击(在#搜索上); /*钩住输入进行搜索*/ $('body')。按键(功能(e){ 如果(e.keyCode=='13'){ 关于搜索(); } }); } $(文件).ready(on_ready);
我已经安装了solr 5.2.1:item.name,不再提供函数on_data。我使用了item.id,它成功了。

ChitKara感谢您的回答。即使在使用json输出后,我也会遇到同样的错误。你能再研究一下这个问题吗?你的搜索查询是什么?我在你上面的问题中看到,你在做q=%3A,我认为这是不正确的。如果要提取所有结果,它应该是:q=%2A%3A%2A或q=*:*我使用的搜索查询是q=*:*非常感谢Chitkara。代码正在运行,没有任何错误,但结果显示为未定义。在第20行,我们正在打印item.name,这意味着name应该是Solr索引中的一个字段,这可能不是真的。我建议将其更改为item.id,并查看是否打印所有结果的id。