Google不接受电子表格中的ajax吗?

时间:2015-06-13 17:55:57

标签: jquery ajax google-apps-script modal-dialog xmlhttprequest

我正在尝试使用JQuery .getXmlHttpRequest获取数据,但似乎两者都失败了。

我正在尝试在电子表格中创建的模态对话框中执行此操作。

在尝试之前是否有任何错误,或者我必须做的任何程序?

详细说明:

1 - Modal Dialog正在运行(我在ajax代码之前显示的消息显示正常,.get之后的消息也正常。
2 - 我知道服务器端的谷歌UrlFetch,但我现在只对客户端感兴趣。

代码:

1 - Jquery得到:

alert("test");

$.get("http://www.w3schools.com/jquery/demo_test.asp", function(data,status){
            alert(status + " /// " + data); //never shown

    });

alert("after get"); //shown

2 - HttpRequest:

var Req = new XMLHttpRequest();
var URL2 = "http://www.w3schools.com/ajax/ajax_info.txt";
Req.open('GET', URL2, false);
alert("Got2");
Req.send();
alert("sent2");  //never shown 
alert(Req.responseText); //never shown

1 个答案:

答案 0 :(得分:2)

我假设你在模态对话框中使用自定义HTML代码?

据我所知,您的Javascript代码没有问题,但是您的XMLHttpRequest(以及JQuery.get,因为它依赖于XMLHttpRequest)由于权限问题而失败。您可以在浏览器的开发者控制台中看到错误。

首先,使用HTTPS加载Google Spreadsheets,并且(至少在我测试的Chrome中)不允许您通过XMLHttpRequest从HTTPS页面加载不安全的HTTP资源(如果端点不安全,则可以这样做)那么你不能保证通过XMLHttpRequest获得的任何数据都不是恶意攻击者插入的数据,而不是实际数据。

其次,默认情况下,XMLHttpRequest将您限制为仅限于同一个域。这意味着您只能访问加载脚本代码的域[some random string].googleusercontent.com上的资源。要对另一个域(称为跨源XMLHttpRequest)执行XMLHttpRequest,提供资源的服务器必须发送特殊的HTTP标头,指示服务器允许这种跨源访问。更多细节:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS。因此,除非w3schools服务器发送正确的标头,否则您不能在这些URL上使用XMLHttpRequest。

因此,如果要访问资源,可能需要确保通过HTTPS提供服务并发送正确的标头。正确执行上述操作的资源示例是Yahoo Query Language endpoints。使用以下URL将起作用,例如:

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D'http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FYahoo'%20and%20xpath%3D'%2F%2Ftable%2F*%5Bcontains(.%2C%22Founder%22)%5D%2F%2Fa'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys

或者,只需使用Google的服务器通过UrlFetch

访问该资源