首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:未绑定变量:*AJAX-处理器*使用HT-SIMPLE-AJAX

错误:未绑定变量:*AJAX-处理器*使用HT-SIMPLE-AJAX
EN

Stack Overflow用户
提问于 2018-03-21 22:29:24
回答 1查看 76关注 0票数 2

我使用在AJAX之上提供了一个简单的JSON结构。如果defun-ajax定义的函数是在、lisp映像和服务器启动后编译的,那么它的工作效果非常好。

如果使用定义的函数加载lisp程序(带有ccl --load),则会得到以下错误:

错误:未绑定变量:*AJAX处理器*执行时:#,进程侦听器(1)。 输入:GO to continue,:POP to abort,:R以获取可用的重新启动列表。如果继续:跳过加载"/home/hunchentoot/quicklisp/local-projects/gac-man/run.lisp“类型:?其他选择。

其职能如下:

代码语言:javascript
复制
(defun-ajax machine-info (serial) (*ajax-processor*)
  (let* ((serialn (remove #\" serial)))
    (concatenate 'string
     "Lots of boring stuff" "here")))

ajax处理器是在程序开始时调用的另一个函数创建的:

代码语言:javascript
复制
(defun start ()
  (setup)
  (connect-to-database)
  (defvar *web-server* (start (make-instance 'hunchentoot:easy-acceptor :port 8080
                     :document-root #p"~/www/")))
  (defvar *ajax-processor* 
  (make-instance 'ajax-processor :server-uri "/ajax"))
  (print "Starting web server...")
  (setf *show-lisp-errors-p* t
    *show-lisp-backtraces-p* t)
  (define-easy-handler (docroot :uri "/") () (docroot)
  ....
  ....
   (setq *dispatch-table* (list 'dispatch-easy-handlers 
               (create-ajax-dispatcher *ajax-processor*)))))

然而,如果我启动所有东西,然后在函数中编译,然后再通过slime编译,它就会工作得很好。为什么会发生此错误?

我在64位Linux上使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-21 23:22:00

您的defun-ajax表单似乎是在运行start函数之前加载的。这并不令人惊讶。通常,所有的代码都会被加载,只有这样才会调用入口点。

你应该总是非常怀疑defvardefundefparameter等形式出现在一个功能体中。他们不属于那里。将它们作为toplevel形式放置,以便将它们作为程序的一部分加载。在运行start函数期间定义的大部分内容实际上应该是toplevel表单。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49417566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档