当我查看有关该函数的文档时:
url-retrieve
which lets you run a callback function after the page has been retrieved.
(下面是另外一个函数,不过这个我不需要)
See also ‘browse-url-emacs if you just want to load a URL into a buffer
(opens in another window).
我想要知道的是:
这个callback函数到底怎么获取url-retrieve所下载的数据,然后解析到一个变量之中?
在查阅
insert-translated-name.el 源代码 的时候,我发现其对于CALLBACK(按照我查阅的资料,所有的数据处理,发生在提供给url-retrieve函数的回调函数之中)的代码如下(我参考了对于有道部分的处理,因为这跟我想要做的事情差不多):
(defun insert-translated-name-youdao-retrieve-callback (&optional redirect word style insert-buffer placeholder)
(let (json word translation result)
;; Get translation.
(set-buffer-multibyte t)
(goto-char (point-min))
(when (not (string-match "200 OK" (buffer-string)))
(error "Problem connecting to the server"))
(re-search-forward "^$" nil 'move)
(setq json (json-read-from-string
(buffer-substring-no-properties (point) (point-max))))
(kill-buffer (current-buffer))
(setq translation (elt (assoc-default 'translation json) 0))
;; Insert result with placeholder point.
(insert-translated-name-update-translation-in-buffer word style translation insert-buffer placeholder)))
其中
word style insert-buffer placeholder
这几个变量是程序自定义用于导出输出的变量名(为了实现按照风格生成对应字符串(插入变量))
而json是负责处理翻译引擎返回的JSON数据
其余对于buffer的解析(包括闪过前面的header部分也明白)
问题就在于,当我编写类似的代码时:
Contacting host: api.fanyi.baidu.com:443
beginner-translate-main: Wrong type argument: stringp, #<buffer *http api.fanyi.baidu.com:443*>
uncompressing publicsuffix.txt.gz...done
reference to free variable ‘apple’
从这个情况下看,翻译查询结果应当是成功返回了(百度采取了gzip压缩,所以那个uncompressing应当就是查询结果)
但是,那个buffer我怎么都访问不到,数据也处理不了.
请问这个问题该怎么解决?