5

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?

+0

Qual è il 'datatype' indietro dal server? Passa a 'dataType:" html ",' se è 'html'. – gui47

+0

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

+0

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

risposta

8

Questo è il modo in cui l'ho fatto ... http://jsfiddle.net/adutu/7towwv55/1/ Si può vedere che si riceve un errore CORS ma funziona ... i dati vengono dove dovrebbe essere

 function postToGoogle() { 
      var field3 = $('#feed').val(); 

      $.ajax({ 
      url: "https://docs.google.com/forms/d/[key]/formResponse", 
      data: {"entry.347455363": field3}, 
      type: "POST", 
      dataType: "xml", 
      statusCode: { 
       0: function() { 
        //Success message 
       }, 
       200: function() { 
        //Success Message 
       } 
      } 
     }); 
     } 

Tutte le informazioni here

+0

CORS non sarà un problema all'interno di un interno – Xan

+2

Posso inviare i dati in quel modo, ma se ho più di una sezione in forma di Google, quindi come inviare i valori della prossima sezione? –

+0

Questo ottiene i dati del modulo nel foglio di calcolo delle mie risposte, ma il CORS genera un errore, quindi non posso fare convalida e comportamenti di successo. Il codice di stato è 0 se è un post di successo e un post non riuscito. – user3411192

Problemi correlati