为什么此电子邮件发送功能不起作用?
继承人我的电子邮件发送功能:为什么此电子邮件发送功能不起作用?
function send() {
var key = "dJdJekCVAFIqvUJ13DEczZjgIh_4MyeIGEHz2GBYKFe";
var message_name = "defender_send_message";
var data = {};
data.value1 = document.getElementById('textBox').value;
data.value2 = localStorage.getItem("AdminsEmail");
var url = "https://maker.ifttt.com/trigger/" + message_name + "/with/key/" + key;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == XMLHttpRequest.DONE) {
if (xmlhttp.status == 200) {
console.log("Message Sent");
}
}
}
xmlhttp.open('POST', url, true);
xmlhttp.responseType = 'json';
xmlhttp.send(new FormData(data));
}
我想创建一个电子邮件发送功能,只有纯JS,不是jQuery的或任何东西。我收到以下错误,当我点击发送:
(忽略第一个错误我固定的话) 我有工作了jQuery函数(但是我必须摆脱它):
var message = localStorage.getItem("Message");
console.log(message + localStorage.getItem("AdminsEmail"));
var key = "dJdJekCVAFIqvUJ13DEczZjgIh_4MyeIGEHz2GBYKFe"; // << YOUR KEY HERE
var message_name = "defender_send_message"; // << YOUR MESSAGE NAME HERE
var url = "https://maker.ifttt.com/trigger/" + message_name + "/with/key/" + key;
$.ajax({
url: url,
data: {value1: message,
value2: localStorage.getItem("AdminsEmail")},
dataType: "jsonp",
complete: function(jqXHR, textStatus) {
console.log("Message Sent");
}
});
为什么这个工作和我的其他功能不是?
编辑2:既然看起来端点实际上没有返回JSON,我认为你原来的jQuery代码也是不正确的。你需要对这个iftt.com平台做更多的研究,以及如何使用它。从我所知道的情况来看,它意味着在移动应用程序中使用,而不是在浏览器中使用 - 那么这将是普通的POST XHR,而CORS不适用于移动应用程序。他们有this页面用于测试端点 - 注意它使用curl
这个命令行工具给出了一个示例,CORS不适用。所以我认为你需要重新思考,这项服务并非设计用于浏览器,就像你正在尝试的那样。
编辑:因为事实证明你实际上是试图使用JSONP而不是一个普通的XHR,所有你需要做的是落实,没有jQuery-创建与服务器的URL脚本标记并添加URL参数来定义您的回调函数来处理数据。 This答案应该给你解决方案。
在你的情况下,代码可能是这样的:
http://www.codeply.com/go/bp/VRCwId81Vr
function foo(data)
{
// do stuff with JSON
console.log(data)
}
var script = document.createElement('script');
script.src = "https://maker.ifttt.com/trigger/defender_send_message/with/key/"+
"dJdJekCVAFIqvUJ13DEczZjgIh_4MyeIGEHz2GBYKFe?callback=foo";
document.getElementsByTagName('head')[0].appendChild(script);
请注意,这并没有为我工作(但你的代码,你会得到Message sent
打印到控制台,所以也许你认为它工作?) - 响应不是JSON。最有可能的终端实际上并不是用于JSONP?
我的回答如下,只适用于你想在没有JSONP的浏览器中做常规XHR。
发生这种情况是因为浏览器的Cross Origin Resource Sharing策略。您的代码托管在本地主机上,它试图通过XmlHttpRequest访问托管在maker.ifttt.com上的资源。为了实现这一点,需要将maker.ifttt.com上的服务器配置为允许从本地主机访问。据推测,由于您不控制该服务器,因此无法进行更改。
就你而言,最好的解决方案是通过你自己的服务器向maker.ifttt.com发出请求 - CORS不适用于服务器到服务器的请求。将XmlHttpRequest发送到您的服务器,从请求URL参数中获取有关电子邮件的数据,然后使用该数据向maker.ifttt.com发出请求。
[CORS](http://*.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-requested-resource)? –
@LeonardoChaia我如何使用cors? – sparpo