【问题标题】:Lucene/Solr Instant Development using jQuery/PHP/AJAX/JSON使用 jQuery/PHP/AJAX/JSON 的 Lucene/Solr 即时开发
【发布时间】:2013-09-12 20:08:22
【问题描述】:

我是 JQuery、AJAX、PHP 等 UI 技术的新手。

我正在构建类似 Google Instant 的功能。我在后端的搜索引擎基础架构非常快,即使是 Tera Bytes 的数据也能以超快的速度返回结果。

我在一个类中有一个 PHP 函数,它返回一个数组:

solrsearch.php

    class SolrSearch{
        ...
        ...
        public function find( $q ){
           ...
           ...
           return $found;
        }
    }

$found is a key value pair something like documentID=>Data

当我用测试字符串在控制台(而不是浏览器)上空运行它并且不使用 $q 输入变量时,一切似乎都很好,我打印 $found 并打印值。

现在我的嵌入 javascript 的 html 文件看起来像这样,所以基本上我在这里捕获文本框上的每个按键并执行获取请求

testjson.html

    <html>
    ...
    <body>

    <div align="center"><p><font size = 7 face="Verdana"> Search: <input type="text" id="term" size = 60 style="font-size:22pt"/>
    <table id="results">
    </table>
    <script>
    $(document).ready( function() {
    $('#term').keyup( function() {
      $.get('search_json.php?q='+escape($('#term').val()), function(data) {
        html = '<table id="results">';
        $.each( data, function( index, val ) {
            html += '<tr><td class="document"><b>'+index.key+'</b>&nbsp;';
            html += 'Dated '+val.value+'</td></tr>';
        } );
        html += '</html>';
        $('#results').replaceWith( html );
      } );
    } );
    } );
    </script>
    ...
    ...
    </html>

最后是我的

search_json.php

$s = new SolrSearch();
print json_encode( $s->find( $_REQUEST['q'] ) );

即使是 json 编码的字符串也可以正常工作,并且可以在控制台(而不是浏览器)上打印 json

这是我面临的问题:在浏览器上,当我运行 testjson.html 时,它只有一个文本框,我输入了一些字符串,所以我没有在浏览器上显示任何结果。当我使用 Fiddler(HTTP 调试代理)调试它时,我可以在其中看到 AJAX 获取请求。

任何帮助将不胜感激。如果还有什么我可以添加到需要的问题中,我将非常乐意这样做。

编辑:

我在 solrsearch.php 的 find 函数中进一步调试并打印了 $q,它没有打印值,这意味着该值没有从 search_json.php 传递,但是我可以在 Fiddler 上看到 GET 请求。

【问题讨论】:

  • 您是否尝试过使用 $.getJSON 而不是 $.get,因为如果您期望 JSON 数据更合适,并且可以保证,如果 JSON 正确,您将获得一个对象作为数据。回调函数真的执行了吗?你试过console.log数据看看是否正确?
  • @gillesc:感谢您的帮助。实际上查询并没有被传递到从 UI 中查找 solrsearch.php 的功能。

标签: php javascript jquery ajax json


【解决方案1】:

我猜这行:

  • html += '&lt;/html&gt;';

应该是

  • html += '&lt;/table&gt;';

顺便说一句,不要使用$('#results').replaceWith( html ); 尝试使用$('#results').html( html );

编辑: 用 $.ajax() 代替 $.get():

$.ajax({
   url: 'search_json.php',
   type: 'POST',
   data: { q: escape($('#term').val() },
}).done(function(resp) {
   //Your html code with response options
});

【讨论】:

  • 感谢您的帮助。我在我的问题中编辑了 html 中的正文部分。我尝试了这些东西,但没有奏效。
  • 我已经用一些更相关的调试信息编辑了我的问题。
  • 尝试从你的javascript代码html = '&lt;table id="results"&gt;';html += '&lt;/table&gt;';中删除这两行
【解决方案2】:

如果你的前端使用 HTML,你一定要看看 AJAX-SOLR

AJAX Solr 是一个 JavaScript 库,用于为 Apache Solr 创建用户界面

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多