0

我有一个简单的 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 文件,并让纸浆完成它的工作。

我该怎么做呢?

谢谢!

4

1 回答 1

1

你可以purescript-affjax试一试,它基于 XHR 请求,在 Node 和浏览器上都可以使用。

如果你想继续自己做,XMLHTTPRequest即使在为它安装了一个包之后,原因仍然是不确定的,npm你还需要require它在节点中公开的模块。

我们在 Affjax 中使用xhr2from npm,因为我认为我们遇到了一些问题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 代码中涉及更多内容。

于 2016-05-07T15:39:32.323 回答