2012-07-14 31 views
12

Tôi có Google Apps Script ContentService đơn giản phát ra chuỗi như "Hello world Sat Jul 14 2012 14:17:21 GMT + 1000 (EST)" Địa chỉ là https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec và mở cửa ẩn danh. Cảm thấy tự do để đánh nó. Mã này là:Tôi làm cách nào để yêu cầu XHR/ajax chống lại việc sử dụng Google Apps Script ContentService?

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

Khi tôi truy cập URL trong trình duyệt, nó trả về chuỗi như mong đợi (pass.png). Khi tôi sử dụng cùng một URL trong một XHR (gọi ajax) nó không thành công với một lỗi rỗng. Trong công cụ nhà phát triển trong Chrome, chuyển hướng là "(đã hủy)" (fail.png). Đây là đoạn mã để tạo lại thất bại:

<!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> 

yêu cầu trực tiếp: DIrect requestpass.png yêu cầu XHR: enter image description here Câu hỏi của tôi (hy vọng đủ cụ thể): Làm thế nào để thực hiện cuộc gọi XHR từ một đồng bằng cũ trang web trên ví dụ .com để GET nội dung từ tập lệnh Google Apps Script ContentService ẩn danh?

+0

.... cùng một câu hỏi .... thú vị. –

+0

Có thể trùng lặp với [yêu cầu tên miền chéo Google Apps Script ngừng hoạt động] (http://stackoverflow.com/questions/29525860/google-apps-script-cross-domain-requests-stopped-working) –

Trả lời

9

Tôi không chắc chắn điều này hiện có thể thực hiện được. Chúng tôi đã xem xét phương thức JSONP (không hoạt động; tôi đã thử nghiệm nó) nhưng tôi không nghĩ rằng việc tạo XHR chống lại ContentService đã từng được kiểm tra. Có lẽ chúng ta cần phải thiết lập các tiêu đề CORS cho việc này. Vui lòng gửi yêu cầu tính năng trên trình theo dõi vấn đề và chúng tôi sẽ xem liệu nó có thể được thực hiện hay không.

+0

Hoàn thành tại đây http://code.google.com/p/google-apps-script-issues/issues/detail?id=1563 và tôi cũng sẽ thử phương thức tập lệnh JSONP và báo cáo lại tại đây. –

+2

Việc chèn tập lệnh JSONP hoạt động tốt. Cảm ơn. Vì vậy, bài đăng của tôi là JS 101: Trình duyệt đã từ chối thực hiện GET cuối cùng vì máy chủ GAS sẽ cần (ở mức tối thiểu) thêm tiêu đề CORS "Access-Control-Allow-Origin: somedomain | *" https://developer.mozilla.org/en/http_access_control. Máy chủ GAS phát ra không có tiêu đề như vậy. Trong trường hợp vắng mặt của tiêu đề, tập lệnh phía trình duyệt phải tuân theo cùng chính sách gốc (https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript) và do đó trạng thái của GET "(đã hủy)". –

+2

Hi @PeterHerrmann sau hơn một năm tôi bị mắc kẹt trong cùng một vấn đề - bạn đã tìm cách giải quyết vấn đề này chưa? Cảm ơn, Fausto. –

Các vấn đề liên quan