2

以下 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);
      }
})

但随后使用 Mithril 进行的改编将不起作用:

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;}

反序列化告诉 Mithril 按原样返回响应值,而不是 JSON。

4

1 回答 1

3

您需要使用该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)
    })
于 2015-12-16T11:46:52.483 回答