Error: Unbound variable: *AJAX-PROCESSOR* using HT-SIMPLE-AJAX
Error: Unbound variable: *AJAX-PROCESSOR* using HT-SIMPLE-AJAX
我正在使用 HT-SIMPLE-AJAX 在 AJAX 上提供一个简单的 JSON 结构。如果 defun-ajax
定义的函数在 lisp 图像和服务器启动后 编译,它会很好地工作。
如果我用定义的函数加载 lisp 程序(ccl --load
),我得到这个错误:
Error: Unbound variable: *AJAX-PROCESSOR*
While executing: #, in process listener(1).
Type :GO to continue, :POP to abort, :R for a list of available restarts.
If continued: Skip loading "/home/hunchentoot/quicklisp/local-projects/gac-man/run.lisp"
Type :? for other options.
函数如下:
(defun-ajax machine-info (serial) (*ajax-processor*)
(let* ((serialn (remove #\" serial)))
(concatenate 'string
"Lots of boring stuff" "here")))
ajax 处理器在另一个函数中创建,在程序开始时调用:
(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 位上使用 Clozure Common Lisp Linux。
您的 defun-ajax
表单似乎在 start
函数具有 运行[=22= 之前 已加载 ].这并不奇怪。通常,加载所有代码,然后才调用入口点。
你应该始终非常怀疑函数体中出现的defvar
、defun
、defparameter
等形式。他们不属于那里。将它们作为顶层表单,以便它们作为程序的一部分加载。在显示的 start
函数的 运行 中定义的大部分内容实际上应该是顶层形式。
我正在使用 HT-SIMPLE-AJAX 在 AJAX 上提供一个简单的 JSON 结构。如果 defun-ajax
定义的函数在 lisp 图像和服务器启动后 编译,它会很好地工作。
如果我用定义的函数加载 lisp 程序(ccl --load
),我得到这个错误:
Error: Unbound variable: *AJAX-PROCESSOR* While executing: #, in process listener(1).
Type :GO to continue, :POP to abort, :R for a list of available restarts. If continued: Skip loading "/home/hunchentoot/quicklisp/local-projects/gac-man/run.lisp" Type :? for other options.
函数如下:
(defun-ajax machine-info (serial) (*ajax-processor*)
(let* ((serialn (remove #\" serial)))
(concatenate 'string
"Lots of boring stuff" "here")))
ajax 处理器在另一个函数中创建,在程序开始时调用:
(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 位上使用 Clozure Common Lisp Linux。
您的 defun-ajax
表单似乎在 start
函数具有 运行[=22= 之前 已加载 ].这并不奇怪。通常,加载所有代码,然后才调用入口点。
你应该始终非常怀疑函数体中出现的defvar
、defun
、defparameter
等形式。他们不属于那里。将它们作为顶层表单,以便它们作为程序的一部分加载。在显示的 start
函数的 运行 中定义的大部分内容实际上应该是顶层形式。