使用PureScript和Pulp从服务器下载二进制文件的正确方法

问题描述 投票:0回答:1

我有一个简单的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文件,然后让纸浆来完成。

我应该怎么做呢?

谢谢!

javascript xmlhttprequest purescript
1个回答
1
投票

您可以尝试基于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代码中涉及的内容更多。

© www.soinside.com 2019 - 2024. All rights reserved.