2017-04-12 115 views
-1

继承人我的电子邮件发送功能:为什么此电子邮件发送功能不起作用?

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的或任何东西。我收到以下错误,当我点击发送:error

(忽略第一个错误我固定的话) 我有工作了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"); 
    } 
}); 

为什么这个工作和我的其他功能不是?

+0

[CORS](http://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-requested-resource)? –

+0

@LeonardoChaia我如何使用cors? – sparpo

回答

2

编辑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发出请求。

+0

我有一个jQuery的Ajax功能,做了同样的事情,它可以发送电子邮件(我不会去为什么我需要摆脱它)。如果这个错误从来没有出现在ajax函数中,为什么它会出现这个呢?这使我相信还有其他的错误,也许是代码? – sparpo

+0

如果没有更多的信息,不能真正回答这个问题 - 只要你从本地主机发起请求,到maker.ifttt.com网站,你的浏览器就不会允许请求。因此,使用jQuery而不是原生XHR应该没关系。 –

+0

我编辑了我的原始帖子,向您展示了我的其他功能 – sparpo

相关问题