5

मैं क्रोम एक्सटेंशन पर काम कर रहा हूं जो अनिवार्य रूप से एक साधारण कस्टम Google फ़ॉर्म है जो प्रतिक्रिया स्प्रेडशीट पर पोस्ट करेगा। मैं निम्नलिखित समारोह मिला सफलतापूर्वक भेजने के लिए और केवल एक बार डेटा को भरने के लिए है, लेकिन फिर कभी नहीं:स्प्रेडशीट्स पर jQuery और अजाक्स के माध्यम से Google फॉर्म डेटा कैसे पोस्ट करें

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"); 
      } 
     } 
    }); 
} 

मैं CORS अनुरोध हेडर क्योंकि मैं एक नहीं 'पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति' चेतावनी हो रही थी को शामिल करने के लिए किया था कि मेरे अनुरोध को अवरुद्ध कर दिया।

यह एक विस्तार किया जा रहा है, मैं भी निम्न अनुमतियों manifest.json फ़ाइल को जोड़ा गया: इस बिंदु पर

"permissions": [ 
    "http://docs.google.com", 
    "https://docs.google.com", 
    "https://*.google.com", 
] 

, मुझे यकीन है कि वास्तव में क्या पोस्ट करने से डेटा रोकने नहीं कर रहा हूँ। संभावित संकेतक यह हो सकते हैं कि फॉर्म जमा करते समय मुझे "अनंतिम शीर्षलेख दिखाए जाते हैं" सावधानी बरतती है और सर्वर प्रतीक्षा (टीटीएफबी) समय के अनुसार प्रतिक्रिया देने के लिए बहुत लंबा रास्ता ले रहा है।

मैं कोड में गलत कहां जा रहा हूं? (यह किसी कारण से, एक बार काम करता था।) स्प्रेडशीट्स को कस्टम फॉर्म पोस्ट करने के लिए वहां कोई वैकल्पिक समाधान है?

+0

सर्वर से वापस 'डेटाटाइप' क्या है? 'डेटा टाइप करें: "एचटीएमएल" पर स्विच करें,' अगर यह 'html' है। – gui47

+0

वास्तव में, सर्वर से प्रतिक्रिया शीर्षलेख 'सामग्री-प्रकार' 'html' है। मैंने तदनुसार 'डेटा टाइप' को स्विच किया, लेकिन डेटा अभी भी पॉपुलटिंग नहीं कर रहा है। हालांकि मुझे हेडर अनुरोध के लिए "अनंतिम शीर्षलेख दिखाए गए हैं" चेतावनी नहीं मिल रही है। – corcovado

+0

'document.getElementById (" message ") का उपयोग करें। Document.getElementById (" message ") के बजाय आंतरिक टेक्स्ट '। आंतरिक HTML': https://developer.chrome.com/extensions/xhr। क्या आप सामग्री स्क्रिप्ट में क्रॉस-डोमेन एक्सएचआर लागू करते हैं? – gui47

उत्तर

8

इस तरह से मैं यह किया है ... http://jsfiddle.net/adutu/7towwv55/1/ आप देख सकते हैं कि आप एक CORS त्रुटि प्राप्त लेकिन यह काम करता है ... डेटा जहां यह होना चाहिए

 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 
       } 
      } 
     }); 
     } 

अधिक जानकारी देखें हो जाता है here

+0

सीओआरएस – Xan

+2

एक्सटेंशन के अंदर कोई समस्या नहीं होगी, मैं इस तरह से डेटा भेज सकता हूं लेकिन अगर मेरे पास Google फॉर्म में एक से अधिक सेक्शन हैं तो अगले अनुभाग के मूल्य कैसे भेजें? –

+0

यह मेरे प्रतिक्रिया स्प्रेडशीट में डेटा डेटा प्राप्त करता है, लेकिन सीओआरएस एक त्रुटि फेंकता है इसलिए मैं सत्यापन और सफलता व्यवहार नहीं कर सकता। स्थिति कोड 0 है यदि यह एक सफल पोस्ट और एक असफल पोस्ट है। – user3411192

संबंधित मुद्दे