2012-04-03 24 views
20

मैं एक Google स्प्रेडशीट में फॉर्म डेटा पोस्ट करने का प्रयास कर रहा हूं। वर्तमान में, यदि प्रपत्र मान्य है, तो निम्न होती है:गूगल स्प्रेडशीट पर AJAX पोस्ट

if (validateForm === true) { 
     $.ajax({ 
      type: 'post', 
      url: 'https://docs.google.com/spreadsheet/ccc?key=0AlwuDjMUxwhqdGp1WU1KQ0FoUGZpbFRuUDRzRkszc3c', 
      data: $("#workPLZ").serialize(), 
      success: alert($("#workPLZ").serialize()) 
     }); 
    } 
    else {} 

मैं सफलता मेरी प्रपत्र डेटा ठीक से धारावाहिक की जा रही है (यह है) और यह सफल हुआ है कि सत्यापित करने के लिए स्थापित करने के लिए इस्तेमाल किया। हालांकि, मेरी Google स्प्रेडशीट अपडेट नहीं की जा रही है (कोई डेटा नहीं जा रहा है)। मैंने यहां उदाहरण कोड का उपयोग किया, DoGet को doPost (http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-method/) में बदल दिया, और Google स्प्रेडशीट को सार्वजनिक रूप से उपलब्ध कराया है (और किसी के द्वारा संपादन योग्य)। मैंने निर्देशों का पालन किया, कोड में गूगलेक्स में कॉपी किया और फिर सेटअप को दो बार चलाया (पहली बार अनुमति के लिए पूछा गया, दूसरी बार मैंने इसे चलाया, मैंने कुछ भी नहीं देखा)। क्या कोई मेरी मदद कर सकता है? मुझे लगता है कि मैं बहुत करीब हूं।

+0

आम तौर पर क्रॉस साइट स्क्रिप्टिंग को रोक दिया जाता है (यानी AJAX पोस्ट उस मौजूदा डोमेन के अलावा किसी अन्य डोमेन पर पोस्ट करता है), और यह 200 कोड लौटाएगा, वास्तव में चुपचाप विफल रहता है। क्या आपको यकीन है कि यह मामला नहीं है? – Kristian

+0

मुझे नहीं पता - मैं इन सबके लिए अपेक्षाकृत नया हूं। मैं कैसे जांच सकता हूँ? –

+1

workPLZ। मुझे लगता है कि 99% समय –

उत्तर

34

ठीक है, मैं एक समाधान के साथ आया था। क्रॉस-डोमेन AJAX समस्याओं के बारे में सूचित होने के बाद, मैंने आगे बढ़ने का निर्णय लिया और http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-method/ पर आलेख लेखक द्वारा उपयोग की जाने वाली विधि "टी" का पालन किया।

अपनी Google स्प्रेडशीट में डेटा पोस्ट करने के लिए, पहले स्प्रेडशीट बनाएं और शीट नाम (निचला बायां हाथ कोने) डेटा को बदलें। इसके बाद, स्क्रिप्ट संपादक (टूल ==> स्क्रिप्ट संपादक) को अपनी स्प्रेडशीट में खोलें और लेख से स्क्रिप्ट पेस्ट करें। "DoGet (e)" को "doPost (e)" में बदलें। सेटअप स्क्रिप्ट को दो बार चलाएं। पहली बार यह चलाने के लिए अनुमति मांगेगा (इसे अनुदान दें), फिर दूसरी बार जब आप इसे चलाने के लिए चुनते हैं तो आपको कोई भी पॉपअप संकेत नहीं मिलेगा (मैंने संपादक में मेरा भाग लिया ताकि यह ऊपर "रनिंग सेटअप" कोड प्रविष्टि क्षेत्र, लेकिन वह सब था)। उसके बाद, स्क्रिप्ट संपादक में "प्रकाशित करें" का चयन करें और फिर "सेवा के रूप में प्रकाशित करें" का चयन करें। "किसी को भी इस सेवा को आमंत्रित करने की अनुमति दें" रेडियो बटन पर क्लिक करें और "अनाम पहुंच की अनुमति दें" चेक बॉक्स पर क्लिक करें। यूआरएल (महत्वपूर्ण!) की प्रतिलिपि बनाएँ और "सेवा सक्षम करें" पर क्लिक करें। यह "कठिन हिस्सा" था।

अपने एचटीएमएल फॉर्म में, आपके द्वारा सबमिट किए जाने वाले प्रत्येक तत्व में "नाम" विशेषता होनी चाहिए (उदा।) यह नाम डेटा भेजा जाता है - प्रत्येक प्रविष्टि इसके नाम से जुड़ी होती है। सुनिश्चित करें कि आपके द्वारा एकत्र किए जा रहे फ़ॉर्म डेटा के प्रत्येक टुकड़े के लिए, इसका नाम है, और वह नाम आपकी स्प्रेडशीट पर कॉलम के रूप में दर्ज किया गया है (इस प्रकार यह आपके फ़ॉर्म से डेटा को आपकी स्प्रेडशीट पर मैप करता है)। आपके प्रपत्र के लिए, इस तरह विधि पोस्ट करने के लिए और अपने "प्रकाशित सेवा के रूप में" यूआरएल (जो मैं तुम्हें बचाने के लिए कहा था) के लिए कार्रवाई सेट:

<form id="formID" method="post" action="URL" target="hidden_iframe"> 

मैं एक फार्म आईडी शामिल तो मैं उसे चुन सकते हैं और इसे jquery के साथ सबमिट करें। अपने HTML में, ऊपर रूप से पहले, अपने छिपे आइफ्रेम जोड़ें:

<iframe name="hidden_iframe" id="hidden_iframe" style="display:none;"></iframe> 

फ़ॉर्म सत्यापन के कुछ प्रकार (आवश्यक नहीं है, लेकिन अगर हर क्षेत्र से नहीं भरा जाता आप अपनी स्प्रैडशीट में अधूरा डेटा प्राप्त होगा) सेट , और यदि यह मान्य है तो यह एक jquery .submit() को कॉल करता है। उदाहरण:

if (formValidation === true){ 
      $("#formID").submit(); 
    } 
    else {} 

तो यही वह है। सौभाग्य!

+1

पहेली का अंतिम भाग कुछ प्रकार की प्रतिक्रिया पुष्टिकरण है जिसे आईफ्रेम के 'ऑनलोड() 'का उपयोग करके यहां दस्तावेज किया गया है। यह निश्चित रूप से बुलेटप्रूफ नहीं है लेकिन यह एक शुरुआत है। http://stackoverflow.com/questions/467008/asynchronous-cross-domain-post-request-via-javascript#answer-467065 –

+0

धन्यवाद आपके उत्तर के लिए बहुत कुछ, आपने मेरा दिन बनाया! –

+0

@ स्टुअर्ट नेल्सन। सेवा के रूप में कोई प्रकाशन नहीं है बल्कि वेब ऐप के रूप में तैनात किया गया है! क्या हमें इसका चयन करना चाहिए? – user1788736

10

जैसा कि Google Apps स्क्रिप्ट में अब ContentService है जो JSON प्रतिक्रियाओं को वापस कर सकता है छुपा आईफ्रेम का उपयोग किये बिना AJAX अनुरोध करना संभव है।मूल समाधान के अनुच्छेद लेखक के रूप में मैं published an updated version of this technique which includes an ajax example

उपयोगकर्ताओं को भी इस नए संस्करण को बदलने पर विचार करने के लिए के रूप में यह अन्य नए Google Apps स्क्रिप्ट सेवा का इस्तेमाल कर सकते हैं है, विशेष रूप से:

  • LockService का उपयोग कर से बचने के लिए समवर्ती लेखन पहुंच; और
  • नई PropertiesService का उपयोग करने जा स्क्रिप्ट डेटा
+0

आपके लेख का लिंक मृत है –

+0

सर्वर की समस्याएं - – mhawksey

+0

@mhawksey वापस आना चाहिए? http: // stackoverflow।कॉम/प्रश्न/33180172/क्यों-करता-मेल-प्रेषण-से-google-spreadsheet-script-not-work मैं आपकी स्क्रिप्ट का उपयोग कर रहा हूं लेकिन फॉर्म पोस्ट होने पर ईमेल भेजने का प्रयास कर रहा हूं। – nelsonic

2

मैं तुम्हें AJAX न Google फ़ॉर्म, या PHP के बिना Google स्प्रेडशीट में डेटा भेजने के लिए आसान रास्ता दिखाएगा स्टोर करने के लिए ... बस गूगल स्प्रैडशीट और HTML या एंड्रॉइड भी।

  1. एक नई Google स्प्रेडशीट बनाएं।
  2. ओपन उपकरण/स्क्रिप्ट संपादक

तुम सिर्फ एक HTML और एक Code.gs संपादक में दो फ़ाइलों की जरूरत है:

    :

    एक उदाहरण के रूप

  1. जाओ फ़ाइल इस फ़ाइल/नए HTML नाम = Index.html:

    <!DOCTYPE html> 
    <html> 
    <head> 
    <base target="_top"> 
    
    <script> 
    function Enviar(){ 
    
    var txt1=document.getElementById("txt1").value; 
    var txt2=document.getElementById("txt2").value; 
    var txt3=document.getElementById("txt3").value; 
    google.script.run.doSomething(txt1,txt2,txt3); 
    } 
    </script> 
    </head> 
    
    <body> 
    Prueba de Envio de informacion<br> 
    <input type="text" value="EMAIL" name="txt1" id="txt1"><br> 
    <input type="text" value="CEDULA" name="txt2" id="txt2"><br> 
    <input type="text" value="NOMBRE" name="txt3" id="txt3"><BR> 
    <Button name="btn1" onClick="Enviar();">Enviar</button> 
    </body> 
    
    </html> 
    

वहाँ भेजने के लिए 3 क्षेत्र हैं: ईमेल, cédula, NOMBRE

  1. ही ScriptEditor में Code.gs फ़ाइल और प्रकार डी पर जाएँ:

    function doGet() { 
    return HtmlService.createHtmlOutputFromFile('Index') 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
    } 
    
    function doSomething(s1,s2,s3){ 
    
    Logger.log('datos:'+s1+" "+s2+" "+s3); 
    var enlace="https://docs.google.com/spreadsheets/d/ 
    1XuAXmUeGz2Ffr11R8YZNihLE_HSck9Hf_mRtFSXjWGw/edit"; 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var ss = SpreadsheetApp.openByUrl(enlace); 
    var sheet = ss.getSheets()[0]; 
    sheet.appendRow([s1, s2, s3]); 
    Logger.log(ss.getName()); 
    } 
    

जहां आपके स्प्रेडशीट

  1. एप्लिकेशन ऐप के रूप में प्रकाशित करें और अपनी नई स्क्रिप्ट का यूआरएल प्राप्त करें। अब आप इस यूआरएल का उपयोग अपने एचटीएमएल एप्लिकेशन या एंड्रॉइड ऐप में एम्बेड के रूप में कर सकते हैं। बस। उपयोगकर्ता को इस स्क्रिप्ट को खोलने की अनुमति के लिए कहा जाएगा
संबंधित मुद्दे