我正在努力使用jquery从SOLR获得响应。当我使用下面的代码时,我得到错误 Typeerror:data is null
查看firebug中的代码时, on_data函数中的数据为空。我想我错过了Solr URL中的内容。我使用的网址是http://xxxx.xxx.xxxx.xxx/xxx_xxx/core0/selectcore0/select/?q= %3A & version = 2.2& start = 0& rows = 10& indent = on&重量= 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>
答案 0 :(得分:4)
以下是您的代码的工作版本以及更改列表: 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>
答案 1 :(得分:2)
由于您使用的是$ .getJSON,因此您可能需要在查询中添加&amp; wt = json 。
默认情况下,Solr提供XML响应。您需要通过添加&amp; wt = json
来指定是否需要JSON响应答案 2 :(得分:0)
我已经在函数on_data中安装了solr 5.2.1:item.name,不再提供。我使用了item.id,但它确实有效。