ajax solr问题

ajs*_*sie 1 javascript ajax jquery solr

我按照ajax solr教程,在第一步我编写了这段代码.

header.php文件:

<script type="text/javascript" src="static/js/ajax-solr/core/Core.js"></script>
<script type="text/javascript" src="static/js/ajax-solr/core/AbstractManager.js"></script>
<script type="text/javascript" src="static/js/ajax-solr/managers/Manager.jquery.js"></script>
<script type="text/javascript" src="static/js/ajax-solr/core/Parameter.js"></script>
<script type="text/javascript" src="static/js/ajax-solr/core/ParameterStore.js"></script>
<script type="text/javascript" src="static/js/reuters.js"></script>
Run Code Online (Sandbox Code Playgroud)

reuters.js:

var Manager;

(function ($) {
  $(function () {
    Manager = new AjaxSolr.Manager({
      solrUrl: 'http://localhost/solr/select'
    });
    Manager.init();
  });
})(jQuery);

// build query
Manager.store.addByValue('q', '*:*');

// do request
Manager.doRequest();
Run Code Online (Sandbox Code Playgroud)

但当我运行它时,firebug说Manager.store.addByValue('q',' : '); 没有定义.

怎么会?我已正确添加所有库.

jit*_*ter 7

我想你的脚本应该更像这样.

在您的情况下,最后一个语句不在"就绪"函数之外,因此可能在AjaxSolr库完成加载之前运行.

var Manager;

(function ($) {

  $(function () {
    Manager = new AjaxSolr.Manager({
      solrUrl: 'http://example.solrstuff.org/solrjs/select'
    });
    Manager.init();
    //moved the next two calls inside the initialization block
    Manager.store.addByValue('q', '*:*');
    Manager.doRequest();
  });

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

要回答评论中的问题(与实际问题无关,所以如果您自己了解代码,请跳过)

内在的$(function (){...});只是一个简写$(document).ready(function (){...});.

outer-one:使用参数(function($){ })(jQuery);定义一个匿名的未命名函数function($){ },并立即调用传入jQuery对象的函数作为参数.所以里面$jQuery对象.我猜他们用这个语法AjaxSolr框架是不可知的,当你使用一些其他的框架,你只需更换(...)(jQuery)(...)(otherFrameworkObjectInstance)

所以(几乎)只是以下的一个发烧友版本

var Manager
var myFunction = function ($) {
    $(function () {
        Manager = new AjaxSolr.Manager({
            solrUrl: 'http://example.solrstuff.org/solrjs/select'
        });
        Manager.init();
        Manager.store.addByValue('q', '*:*');
        Manager.doRequest();
    });
};

myFunction(jQuery);
Run Code Online (Sandbox Code Playgroud)

但这会给你留下一个无用的变量myFunction,它指的是你只运行一次的函数.这种风格也类似于jQuery插件最佳实践的样子