如何使用 Mithril 将 AJAX 请求格式化为带有身份验证密钥的 API?

How do you format an AJAX request to an API with an authentication key using Mithril?

以下 GET 请求使用 jQuery 有效:

$.ajax({
url: "https://yoda.p.mashape.com/yoda?sentence="+phrase,
headers: {"X-Mashape-Key": "superSecretKey", "Accept": "text/plain"},
success: function(data) {
        console.log(data);
      },
error: function(data) {
        console.log(data);
      }
})

但是接下来使用秘银的改编将不起作用:

Yoda.submit = function (phrase) {
  console.log(phrase);
  return m.request({ 
  method: 'GET', 
  url: "https://yoda.p.mashape.com/yoda?sentence=" + phrase, 
  headers: {"X-Mashape-Key": "superSecretKey", 
          "Accept": "text/plain"}
  });
}

在查阅 https://lhorie.github.io/mithril/mithril.request.html 上的文档并搜索类似示例后,我尝试了不同的变体。我正在考虑使用 3rd 方库,但我想在我走得太远之前先在这里尝试一下。当我尝试发出 AJAX 请求时收到的错误消息是我缺少 API 键,即使它就在那里。

更新:

我后来了解到,除了下面标记的答案之外,Mithril 会自动将 API 响应解析为 JSON。因为我要从这个 API 返回一个字符串响应,所以我必须在我的 m.request 对象中包含以下条目:

deserialize: function(value) {return value;}

Deserialize 告诉 Mithril 按原样 return 响应值,而不是 JSON。

您需要使用 config 属性:

m.request({method: 'GET', url: "https://yoda.p.mashape.com/yoda?sentence=" + phrase,
    config: function(xhr, options) {
        xhr.setRequestHeader("X-Mashape-Key", "superSecretKey")
        xhr.setRequestHeader("Accept", "text/plain")
    }}).then(function(data) {
        console.log('success: ', data)
    }, function(err) {
        console.log('error: ', err)
    })