2008-09-10 5 views
12

मैं अपने Google ऐप इंजन एप्लिकेशन में AJAX को लागू करने का प्रयास कर रहा हूं, और इसलिए मैं एक अच्छा AJAX ढांचा ढूंढ रहा हूं जो मेरी मदद करेगा। किसी को भी कोई विचार है?Google App Engine ऐप्स के लिए कोई भी अच्छा AJAX ढांचा?

मैं Google वेब टूलकिट के बारे में सोच रहा हूं, Google App Engine के लिए AJAX बनाने के मामले में यह कितना अच्छा है?

उत्तर

12

चूंकि Google वेब टूलकिट subset of Java है, तो जब आप बैकएंड पर जावा भी करते हैं तो यह सबसे अच्छा काम करता है। चूंकि Google ऐप इंजन वर्तमान में Python only है, मुझे लगता है कि आपको अपने सर्वर और क्लाइंट को एक-दूसरे से अच्छी तरह से बात करने के लिए बहुत गड़बड़ करना होगा।

jQuery AJAX Tag at DjangoSnippets.com में सबसे लोकप्रिय जावास्क्रिप्ट लाइब्रेरी विकल्प प्रतीत होता है।

संपादित करें: उपर्युक्त पाइथन में लिखे गए Google App Engine अनुप्रयोगों के बारे में केवल सत्य है। चूंकि Google ऐप इंजन अब जावा का समर्थन करता है, इसलिए जीडब्ल्यूटी अब एजेक्स फ्रंट एंड लिखने के लिए एक अच्छा विकल्प हो सकता है। Google even have a tutorial showing you how to do it.

+2

http://code.google.com/webtoolkit/doc/latest/tutorial/appengine.html <- उपर्युक्त ट्यूटोरियल का नवीनतम स्थान। इच्छा है कि मैं इसे संपादित करने के लिए प्रतिनिधि था। ;) – Drew

+0

@Drew - उत्तर में यूआरएल अपडेट किया है। सर उठाने के लिए धन्यवाद। –

+0

धन्यवाद डेव। आह, मुझे लगता है कि यह Google वेब टूलकिट का उपयोग GAE के लिए AJAX ढांचे के रूप में करने की क्षमता से बाहर है। बहुत बुरा! क्या कोई अन्य ढांचा है? – Graviton

3

मैं आपके क्लाइंट-साइड कोड के लिए एक शुद्ध जावास्क्रिप्ट ढांचे (शायद Jquery) की तलाश करने की सिफारिश करता हूं, और पायथन में जेएसओएन सेवाएं लिखता हूं- यह जाने का सबसे आसान/सबसे अच्छा तरीका प्रतीत होता है।

Google वेब टूलकिट आपको जावा में यूआई लिखने और जावास्क्रिप्ट में संकलित करने देता है। जैसा कि डेव कहते हैं, यह बेहतर विकल्प हो सकता है जहां बैकएंड जावा में है, क्योंकि उस मामले के लिए इसमें अच्छा आरपीसी हुक है।

1

jQuery एक अच्छी लाइब्रेरी है, लेकिन Prototype JavaScript framework भी देखें। यह वास्तव में एक सुंदर और सुरुचिपूर्ण भाषा में कभी-कभी अजीब भाषा होने से जावास्क्रिप्ट को बदल देता है।

4

कोई कारण नहीं है कि आपको GAE और Google Web Toolkit (GWT) का एक साथ उपयोग नहीं करना चाहिए। आप पाइथन में अपना बैकएंड कोड और जावा (और संभवतः कुछ जावास्क्रिप्ट) में फ्रंटएंड कोड लिखते हैं, जिसे जावास्क्रिप्ट में संकलित किया जाता है। एक और AJAX ढांचे का उपयोग करते समय आपको सर्वर और क्लाइंट साइड भाषा के बीच यह अंतर भी होगा।

जीडब्ल्यूटी में ऐसी विशेषताएं हैं जो सर्वर पर जावा कोड का दूरस्थ आमंत्रण आसान बनाती हैं, लेकिन ये पूरी तरह से वैकल्पिक हैं। आप बस जेएसओएन या एक्सएमएल इंटरफेस का उपयोग कर सकते हैं, जैसे कि अन्य AJAX फ्रेमवर्क के साथ।

जीडब्ल्यूटी 1.5 जावास्क्रिप्ट ओवरले प्रकारों के साथ आता है, जो मूल रूप से क्लाइंट साइड कोड विकसित करते समय जावा ऑब्जेक्ट जैसे JSON डेटा के टुकड़े का इलाज करने की अनुमति देता है। आप इस here के बारे में अधिक पढ़ सकते हैं।

अद्यतन:

अब जबकि Google Google अनुप्रयोग इंजन के लिए जावा समर्थन जोड़ा गया है, आप पूर्ण Google पर जावा में दोनों बैकएंड और दृश्यपटल कोड ढेर विकसित कर सकते हैं - अगर आप की तरह। Google से एक अच्छा Eclipse plugin है जो GAE, GWT या दोनों का उपयोग करने वाले अनुप्रयोगों को विकसित और तैनात करना बहुत आसान बनाता है।

0

यदि आप जावास्क्रिप्ट से पायथन तक विधि कॉल का आह्वान करने में सक्षम होना चाहते हैं, तो JSON-RPC Google App Engine के साथ अच्छी तरह से काम करता है। विवरण के लिए, Google के आलेख को देखें, "Using AJAX to Enable Client RPC Requests"।

0

मैं वर्तमान में अपने जीएई ऐप के लिए JQuery का उपयोग कर रहा हूं और यह मेरे लिए खूबसूरती से काम करता है। मेरे पास एक चार्ट (google चार्ट) है जो गतिशील है और JSON स्ट्रिंग को पकड़ने के लिए अजाक्स कॉल का उपयोग करता है। यह वास्तव में मेरे लिए ठीक काम करता प्रतीत होता है।

2

आप पजामा (http://pyjs.org/) पर एक नज़र डालना चाहते हैं, जो "पाइथन के लिए जीडब्ल्यूटी" है।

4

यहां बताया गया है कि हमने Google ऐप इंजन पर अजाक्स को कैसे लागू किया है, लेकिन विचार को अन्य प्लेटफ़ॉर्म पर सामान्यीकृत किया जा सकता है।

हमारे पास अजाक्स अनुरोधों के लिए एक हैंडलर स्क्रिप्ट है जो - जेएसओएन प्रतिक्रियाओं के साथ-साथ प्रतिक्रिया देती है। ,

class Command(): 
    """ A simple command pattern. 
    """ 
    _valid = False 
    def validate(self): 
     """ Validates input. Sanitize user input here. 
     """ 
     self._valid = True 

    def _do_execute(self): 
     """ Executes the command. 
      Override this in subclasses. 
     """ 
     pass 

    @property 
    def valid(self): 
     return self._valid 

    def execute(self): 
     """ Override _do_execute rather than this. 
     """ 
     try: 
      self.validate() 
     except: 
      raise 
     return self._do_execute() 

    # Make it easy to invoke commands: 
    # So command() is equivalent to command.execute() 
    __call__ = execute 

ग्राहक पक्ष पर हम:

def Get(self, user): 
    self.handleRequest() 

def Post(self, user): 
    self.handleRequest() 


def handleRequest(self):   
    ''' 
    A dictionary that maps an operation name to a command. 
    aka: a dispatcher map. 
    ''' 
    operationMap = {'getfriends':    [GetFriendsCommand], 
        'requestfriend':   [RequestFriendCommand, [self.request.get('id')]], 
        'confirmfriend':   [ConfirmFriendCommand, [self.request.get('id')]], 
        'ignorefriendrequest':  [IgnoreFriendRequestCommand, [self.request.get('id')]], 
        'deletefriend':    [DeleteFriendCommand, [self.request.get('id')]]} 

    # Delegate the request to the matching command class here. 

आदेशों आदेश पैटर्न का एक सरल कार्यान्वयन कर रहे हैं: संरचना कुछ इस तरह (यह एक मानक GAE हैंडलर स्क्रिप्ट से एक अंश है) लग रहा है एक अजाक्स प्रतिनिधि बनाओ। Prototype.js लिखना और समझना आसान बनाता है। यहाँ एक अंश है:

new AjaxApi(resultHandlerFunction, faultHandlerFunction).getFriends() 

मुझे आशा है कि इस मदद करता है:

/** 
* Ajax API 
* 
* You should create a new instance for every call. 
*/ 
var AjaxAPI = Class.create({ 
    /* Service URL */ 
    url: HOME_PATH+"ajax/", 

    /* Function to call on results */ 
    resultCallback: null, 

    /* Function to call on faults. Implementation not shown */ 
    faultCallback: null, 

    /* Constructor/Initializer */ 
    initialize: function(resultCallback, faultCallback){ 
     this.resultCallback = resultCallback; 
     this.faultCallback = faultCallback; 
    }, 

    requestFriend: function(friendId){ 
     return new Ajax.Request(this.url + '?op=requestFriend', 
     {method: 'post', 
     parameters: {'id': friendId}, 
     onComplete: this.resultCallback 
     });  
    }, 

    getFriends: function(){ 
     return new Ajax.Request(this.url + '?op=getfriends', 
     {method: 'get', 
     onComplete: this.resultCallback 
     });  
    } 

}); 

प्रतिनिधि कॉल करने के लिए, आप की तरह कुछ करते हैं!

7

AJAX लाइब्रेरी का उपयोग करने का एक अच्छा तरीका Google's AJAX Libraries API service का लाभ उठाना है। यह जेएस डाउनलोड करने और इसे अपने /static/ फ़ोल्डर में डालने से थोड़ा तेज़ और क्लीनर है और यह आपके डिस्क कोटा में नहीं खाता है।

अपने जावास्क्रिप्ट में आप सिर्फ डाल, उदाहरण के लिए:

<script src="http://www.google.com/jsapi?key=your-key-here"></script> 

और:

google.load("jquery", "1.3.2"); 

और/या

google.load(google.load("dojo", "1.3.0"); 

कहीं अपने शीर्षक में आप की तरह कुछ रखा आपको Google की API लाइब्रेरी का उपयोग करने की आवश्यकता है।

0

Google ने हाल ही में Google App Engine के जावा संस्करण की घोषणा की है। यह रिलीज एक ग्रहण प्लगइन भी प्रदान करता है जो जीडब्ल्यूटी के साथ जीएई अनुप्रयोगों को आसान बनाता है।

यहाँ विवरण देखें: http://code.google.com/appengine/docs/java/overview.html

बेशक

, यह अजगर के बजाय जावा में अपने आवेदन के पुनर्लेखन के लिए आप की आवश्यकता होगी, लेकिन कोई है जो GWT के साथ काम किया है के रूप में, चलो मैं आपको बता दूँ, एक आधुनिक आईडीई उपयोग करने के लाभों आपके AJAX कोडबेस पर पूरी तरह से इसके लायक हैं।

2

GQuery for GWT भी आजमाएं।

public void onModuleLoad() { 
    $("div").css("color", "red").click(new Function() { 
     public void f(Element e) { 
      Window.alert("Hello"); 
      $(e).as(Effects).fadeOut(); 
     } 
    }); 
} 

कुछ महंगे संकलन समय में जिसके परिणामस्वरूप होने के नाते जावा कोड (जावा> जावास्क्रिप्ट) अनुकूलन और आसान रिफैक्टरिंग: यह जावा कोड है।

अच्छा, यह नहीं है?

3

मेरे ब्लॉग में मैं ऐसा करने का एक आसान तरीका सौदा करता हूं - लिंक है: AJAX with Google App Engine। मैं उपयोग किए गए सभी जावास्क्रिप्ट और पायथन कोड शामिल करता हूं।

+0

इस लिंक में उपयोगी जानकारी हो सकती है, लेकिन jQuery उदाहरण में कोड टूटा हुआ है। – brainjam