2012-07-14 42 views
12

我有一个简单的Google Apps脚本ContentService,它发出一个字符串,如“Hello world Sat Jul 14 2012 14:17:21 GMT + 1000(EST)”,网址是https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec,它对匿名开放。随意点击它。代码是:如何针对Google Apps Script ContentService制作XHR/ajax请求?

function doGet() { 
    var output = ContentService.createTextOutput() 
     .setMimeType(ContentService.MimeType.TEXT) 
     .setContent("Hello world " + new Date()); 
    Logger.log(output.getContent()); 
    return output; 
} 

当我在浏览器中访问URL时,它返回字符串(pass.png)。当我在XHR(ajax调用)中使用相同的URL时,它会失败并出现空错误。在Chrome中的开发者工具中,重定向是“(取消)”(fail.png)。这里是重现故障代码:

<!DOCTYPE html> 
<html> 
<head> 
<script> 
function loadXMLDoc() { 
    xhr=new XMLHttpRequest(); 
    xhr.onreadystatechange=function() { 
    if (xhr.readyState==4 && xhr.status==200) { 
    document.getElementById("myDiv").innerHTML=xhr.responseText; 
    } 
    }; 
    xhr.open("GET","https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec",true); 
    xhr.send(); 
} 
</script> 
</head> 
<body> 

<h2>Using the XMLHttpRequest object</h2> 
<div id="myDiv"></div> 
<button type="button" onclick="loadXMLDoc()">Get Content via XHR</button> 
</body> 
</html> 

直接请求: DIrect requestpass.png XHR请求: enter image description here 我的问题(希望是不够具体):如何使从例如一个普通的旧网页XHR调用.com从匿名Google Apps脚本ContentService脚本获取内容?

+0

....同样的问题....有趣。 – 2016-02-13 17:39:36

+0

[Google Apps脚本跨域请求停止工作]的可能重复(http://stackoverflow.com/questions/29525860/google-apps-script-cross-domain-requests-stopped-working) – 2017-02-13 03:05:05

回答

9

我不确定这是目前可能的。我们考虑了JSONP方法(它可以工作;我已经测试过了),但我认为没有对ContentService的XHR进行过测试。我们可能需要为此设置CORS标头。请在问题跟踪器上提交功能请求,我们会看看是否可以完成。

+0

在此处完成http:///code.google.com/p/google-apps-script-issues/issues/detail?id=1563,我也会尝试使用JSONP脚本方法并在此处报告。 – 2012-07-15 22:06:19

+2

JSONP脚本注入工作正常。谢谢。所以,我的死后是JS 101:浏览器拒绝做最后的GET,因为GAS服务器需要(至少)添加一个CORS头“Access-Control-Allow-Origin:somedomain | *”https:/ /developer.mozilla.org/en/http_access_control。 GAS服务器不会发出这样的头文件。在标题不存在的情况下,浏览器端脚本受制于相同的源策略(https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript),因此GET的状态为“(取消)”。 – 2012-07-16 08:01:57

+2

嗨@PeterHerrmann超过一年后,我陷入了同样的问题 - 您是否设法找到解决方案?谢谢,福斯托。 – 2013-11-20 22:20:09