Sto lavorando a un'estensione di Chrome che è essenzialmente un semplice modulo Google personalizzato che pubblicherà su un foglio di lavoro di risposta. Ho ottenuto la seguente funzione per inviare e popolare i dati una sola volta con successo, ma mai più:Come pubblicare i dati di Google Form via jQuery e Ajax su fogli di calcolo
function postFormToGoogle() {
var timeOne = $("#time1hour").val();
var timeTwo = $('#time2hour').val();
var timeThree = $('#time3hour').val();
$.ajax({
url: "https://docs.google.com/forms/d/FORMKEY/formResponse",
beforeSend: function (xhr) {
xhr.setRequestHeader('Access-Control-Allow-Origin', 'chrome-extension://EXTENSION_ID');
xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET, POST, PUT');
},
data: { "entry_856586387": timeOne,
"entry_244812041": timeTwo,
"entry_2138937452": timeThree },
type: "POST",
dataType: "xml",
xhrFields: {
withCredentials: true
},
statusCode: {
0: function() {
document.getElementById("message").innerHTML = "Your form has been submitted!";
window.location.replace("ThankYou.html");
},
200: function() {
document.getElementById("message").innerHTML = "Your form has been submitted!";
console.log("Success");
window.location.replace("ThankYou.html");
}
}
});
}
ho dovuto includere le intestazioni di richiesta cors perché mi stavo warning un No 'Access-Control-Allow-Origin' che ha bloccato la mia richiesta.
Essendo un'estensione, ho aggiunto anche le seguenti autorizzazioni per il file manifest.json:
"permissions": [
"http://docs.google.com",
"https://docs.google.com",
"https://*.google.com",
]
A questo punto, non sono sicuro esattamente che cosa sta impedendo i dati dal pubblicare. Possibili indicatori potrebbero essere che quando si invia il modulo viene visualizzato un messaggio di avvertenza "Prove provvisorie" e il server impiega troppo tempo per rispondere come indicato dal tempo di attesa (TTFB).
Dove sto andando male nel codice? (Ha funzionato una volta, per qualche ragione.) Qualche soluzione alternativa là fuori per pubblicare un modulo personalizzato su Spreadsheets?
Qual è il 'datatype' indietro dal server? Passa a 'dataType:" html ",' se è 'html'. – gui47
Infatti, l'intestazione di risposta 'content-type' dal server è' html'. Ho cambiato il "dataType" di conseguenza, ma i dati non sono ancora disponibili. Non sto ottenendo più l'avvertenza "Intestazioni provvisorie sono visualizzate" per la richiesta di intestazione. – corcovado
Utilizzare 'document.getElementById (" message "). InnerText' invece di' document.getElementById ("message"). InnerHTML': https://developer.chrome.com/extensions/xhr. Implementate anche XHR di più domini negli script di contenuto? – gui47