来自Google Apps脚本的getJSON无法在Safari中使用

时间:2015-06-16 13:11:48

标签: google-apps-script safari getjson

我已经创建了这段代码来处理我的用户登录。

var gasUrl = "https://script.google.com/macros/s/[my id]/exec";
 function submitFormData() {
        var username = $("#inputEmail").val();
        var password = $("#inputPassword").val();
        $.getJSON(gasUrl + "?username=" + username + "&password=" + password, function(data) {
            if(data[0]) {
                    localStorage.setItem("username", data[0].username);
                    localStorage.setItem("id", data[0].id);
                    window.location.href = "/index.php";
                 }
                 else {
                    $(".reauwth-email").html("wrong");
                 }
            }); 
        }

一切都在Google Chrome中运行,但当我在Safari中尝试相同的操作时,我收到了错误消息。

[Error] Failed to load resource: the server responded with a status of 405 (Method Not Allowed) (echo, line 0)
[Error] Failed to load resource: Cannot make any requests from null. (echo, line 0)
[Error] XMLHttpRequest cannot load [url]. Cannot make any requests from null. (login.php, line 0)

我做错了什么?参数已填满!

1 个答案:

答案 0 :(得分:3)

这可能是Chrome和Safari处理XHR的方式。 Apps Script不支持CORS,因此您需要添加'callback =?' $ .getJson的参数表示JSONP。

gasUrl + "?username=" + username + "&password=" + password +"&callback=?"

然后在您的脚本中,您将返回包装在回调参数中。

function doGet(e){
  var callback = e.parameter.callback; // required for JSONP
  .
  .
  .
  return ContentService.createTextOutput(callback+'('+ JSON.stringify(returnObject)+')').setMimeType(ContentService.MimeType.JAVASCRIPT);
}
相关问题