2008-09-10 25 views

Trả lời

12

Vì Bộ công cụ web của Google là subset of Java, nó hoạt động tốt nhất khi bạn cũng Java ở phần phụ trợ. Vì Google App Engine hiện tại là Python only Tôi nghĩ bạn sẽ phải làm rất nhiều điều để làm cho máy chủ và ứng dụng khách của bạn trò chuyện độc đáo với nhau.

jQuery có vẻ là tùy chọn thư viện JavaScript phổ biến nhất trong số AJAX Tag at DjangoSnippets.com.

Chỉnh sửa: Ở trên chỉ đúng với các ứng dụng Google App Engine được viết bằng Python. Vì Google App Engine hiện hỗ trợ Java, GWT bây giờ có thể là một lựa chọn tốt cho việc viết một giao diện người dùng AJAX. Google even have a tutorial showing you how to do it.

+2

http://code.google.com/webtoolkit/doc/latest/tutorial/appengine.html <- Vị trí mới nhất của hướng dẫn ở trên. Chúc tôi có đại diện để chỉnh sửa nó. ;) – Drew

+0

@Drew - Đã cập nhật URL trong câu trả lời. Cảm ơn cho những người đứng đầu lên. –

+0

Cảm ơn Dave. Ah, tôi cho rằng quy tắc này có khả năng sử dụng Google Web Toolkit làm khung công tác AJAX cho GAE. Quá tệ! Có khung nào khác không? – Graviton

3

Tôi muốn khuyên bạn nên xem xét một khung javascript thuần túy (có thể là Jquery) cho mã phía máy khách của bạn và viết các dịch vụ JSON bằng python - có vẻ là cách dễ nhất/tốt nhất để đi.

Bộ công cụ Web của Google cho phép bạn viết giao diện người dùng trong Java và biên dịch nó thành javascript. Như Dave nói, nó có thể là một lựa chọn tốt hơn khi phụ trợ trong Java, vì nó có các móc RPC đẹp cho trường hợp đó.

1

jQuery là thư viện tốt, nhưng bạn cũng có thể xem Prototype JavaScript framework. Nó thực sự biến JavaScript trở thành một ngôn ngữ thỉnh thoảng khó xử thành một ngôn ngữ đẹp và thanh lịch.

4

Không có lý do gì khiến bạn không nên sử dụng GAE và Bộ công cụ Web của Google (GWT) cùng nhau. Bạn viết mã phụ trợ của bạn bằng Python và mã lối vào trong Java (và có thể một số JavaScript), sau đó được biên dịch sang JavaScript. Khi sử dụng một khung công tác AJAX khác, bạn cũng sẽ có sự khác biệt này giữa ngôn ngữ phía máy chủ và phía máy khách.

GWT có các tính năng giúp thực hiện yêu cầu từ xa mã java trên máy chủ dễ dàng hơn, nhưng chúng hoàn toàn không bắt buộc. Bạn chỉ có thể sử dụng giao diện JSON hoặc XML, giống như với các khung công tác AJAX khác.

GWT 1.5 cũng đi kèm với Lớp phủ JavaScript, về cơ bản cho phép bạn xử lý một đoạn dữ liệu JSON như đối tượng Java khi phát triển mã phía máy khách. Bạn có thể đọc thêm về điều này here.

Cập nhật:

Bây giờ mà Google đã thêm hỗ trợ Java cho Google App Engine, bạn có thể phát triển cả backend và frontend mã trong Java trên Google đầy đủ chồng - nếu bạn muốn. Có một số Eclipse plugin từ Google giúp dễ dàng phát triển và triển khai các ứng dụng sử dụng GAE, GWT hoặc cả hai.

0

Tôi hiện đang sử dụng JQuery cho ứng dụng GAE của mình và nó hoạt động tốt cho tôi. Tôi có một biểu đồ (google charts) đó là năng động và sử dụng một cuộc gọi Ajax để lấy một chuỗi JSON. Nó thực sự có vẻ tốt cho tôi.

4

Dưới đây là cách chúng tôi đã triển khai Ajax trên Google App Engine, nhưng ý tưởng có thể được khái quát hóa thành các nền tảng khác.

Chúng tôi có một kịch bản xử lý cho các yêu cầu Ajax đáp ứng tối đa - với các phản hồi JSON. Cấu trúc trông giống như thế này (đây là một đoạn trích từ một handler kịch bản tiêu chuẩn GAE):

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. 

Các lệnh là một thực hiện đơn giản của mẫu lệnh:

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 

Về phía khách hàng, chúng tôi tạo một đại biểu Ajax. Prototype.js giúp dễ dàng viết và hiểu. Dưới đây là một đoạn trích:

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

}); 

để gọi các đại biểu, bạn làm như sau:

new AjaxApi(resultHandlerFunction, faultHandlerFunction).getFriends() 

Tôi hy vọng điều này sẽ giúp!

7

Cách tốt nhất là sử dụng thư viện AJAX là tận dụng lợi thế của Google's AJAX Libraries API service. Đây là một chút nhanh hơn và sạch hơn so với tải JS và đặt nó trong thư mục /static/ của bạn và không ăn vào hạn ngạch đĩa của bạn.

Trong javascript của bạn, bạn sẽ chỉ cần đặt, ví dụ:

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

và/hoặc

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

Một nơi nào đó trong phần đầu của bạn, bạn sẽ đặt một cái gì đó như:

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

Và đó là tất cả những gì bạn cần để sử dụng thư viện API của Google.

0

Gần đây, Google đã công bố phiên bản Java của Máy ứng dụng của Google. Bản phát hành này cũng cung cấp một plugin Eclipse giúp phát triển các ứng dụng GAE với GWT dễ dàng hơn.

Xem chi tiết tại đây: http://code.google.com/appengine/docs/java/overview.html

Tất nhiên, nó sẽ yêu cầu bạn phải viết lại ứng dụng của bạn trong Java thay vì trăn, nhưng khi ai đó làm việc với GWT, hãy để tôi nói với bạn, những ưu điểm của việc sử dụng một IDE hiện đại trên codebase AJAX của bạn hoàn toàn đáng giá.

2

cũng thử GQuery for GWT. Đây là mã Java:

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

Là mã Java dẫn đến tối ưu hóa biên dịch (Java-> JavaScript) đắt tiền và lập lại cấu trúc dễ dàng hơn.

Tốt, phải không?

3

Trong blog của tôi, tôi giải quyết một cách dễ dàng để thực hiện việc này - liên kết là: AJAX with Google App Engine. Tôi bao gồm tất cả mã javascript và python mà tôi đã sử dụng.

+0

Có thể có thông tin hữu ích trong liên kết này, nhưng mã trong ví dụ jQuery bị hỏng. – brainjam

Các vấn đề liên quan