我有一个简单的javascript函数,该函数创建一个XMLHttpRequest,运行它(同步以使事情尽可能简单)并返回结果数组。
exports.loadBinFile = function() { ... }
我在js文件x.js中有该脚本,并且在我的文件中有匹配的PureScript文件x.purs:
foreign import loadBinFile :: forall e. Eff (fileLoad :: FILELOAD | e) (Array Int)
关于这一切,一切都很好,但是我使用的是浏览器对象XMLHttpRequest,当尝试运行纸浆运行时,我收到一个错误,指出XMLHttpRequest是未定义的。
我试过安装一个名为xmlhttprequest的npm包,其中包含上述对象,也尝试过类似的Bower包,但是都失败了。
我对javascript比较陌生,并且我认为自己尝试做错事情的方式是完全错误的。 解决这个问题的正确方法是什么?
我认为可以通过将脚本放在.html文件中来解决此问题,但是我想正确地做到这一点,即拥有匹配的.purs和.js文件,然后让纸浆来完成。
我应该怎么做呢?
谢谢!
您可以尝试基于XHR请求的purescript-affjax
,它既可以在Node上也可以在浏览器中使用。
如果您想继续自己做下去,即使通过npm
为它安装了一个软件包后, XMLHTTPRequest
仍未定义的原因是,您还需要在节点中require
它公开的模块。
我们在Affjax的npm
中使用xhr2
,因为我认为xmlhttprequest
遇到了一些麻烦,因此,使用该示例,在FFI JS中,您将需要使用如下函数:
var newXHR = function () {
if (typeof module !== "undefined" && module.require) {
var XHR = module.require("xhr2");
return new XHR();
}
return new XMLHttpRequest();
}
不仅仅是尝试调用new XMLHTTPRequest()
。 您可以看到类似的内容,尽管在affjax FFI代码中涉及的内容更多。