如何使用 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)
})
以下 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)
})