2

jqueryを使用してSOLRから応答を取得するために取り組んでいます。以下のコードを使用すると、Typeerror:data is nullというエラーが表示されました

firebugのコードを見ると、on_data 関数のデータが null になっています。Solr URL に何かが欠けていると思います。使用している URL はhttp://xxxx.xxx.xxxx.xxx/xxx_xxx/core0/selectcore0/select/?q= %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>

4

3 に答える 3

4

コードの作業バージョンと変更のリストは次のとおりです 。1) wrf の追加: JSON 応答の周りにラッパー関数を追加します。これは、JavaScript コールバック関数を指定するための動的スクリプト タグを使用して AJAX で役立ちます 。2) コールバックの追加:使用する必要があります。 JavaScript のクロスドメイン セキュリティ制限により、通常の JSON リクエストの代わりに JSONP。

<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>
于 2013-05-29T18:17:07.133 に答える
2

$.getJSON を使用しているため、クエリに&wt=jsonを追加する必要がある場合があります。

したがって、クエリは次のようになります。http://xxxx.xxx.xxxx.xxx/xxx_xxx/core0/selectcore0/select/?q=search_query&version=2.2&start=0&rows=10&indent=on&wt=json

デフォルトでは、Solr は XML 応答を返します。&wt=json を追加して、JSON 応答が必要かどうかを指定する必要があります

モードの詳細: http://wiki.apache.org/solr/SolJSON

于 2013-05-24T20:51:49.250 に答える
0

solr 5.2.1 をインストールしました: 関数 on_data の item.name はもう提供されていません。item.id を使用しましたが、うまくいきました。

于 2015-10-03T20:21:48.857 に答える