문제

Google App Engine 애플리케이션에 AJAX를 구현하려고 하므로 도움이 될 좋은 AJAX 프레임워크를 찾고 있습니다.누구든지 어떤 생각을 가지고 있습니까?

Google Web Toolkit에 대해 생각하고 있습니다. Google App Engine용 AJAX를 만드는 것이 얼마나 좋은가요?

도움이 되었습니까?

해결책

Google 웹 툴킷은 자바의 하위 집합 백엔드에서도 Java를 사용할 때 가장 잘 작동합니다.Google App Engine은 현재 Python만 해당 내 생각에는 서버와 클라이언트가 서로 잘 대화할 수 있도록 많은 노력을 기울여야 할 것 같습니다.

jQuery는 업계에서 가장 인기 있는 JavaScript 라이브러리 옵션인 것 같습니다. DjangoSnippets.com의 AJAX 태그.

편집하다: 위 내용은 Python으로 작성된 Google App Engine 애플리케이션에만 적용됩니다.Google App Engine이 이제 Java를 지원하므로 이제 GWT는 AJAX 프런트 엔드를 작성하는 데 좋은 선택이 될 수 있습니다. Google에는 이를 수행하는 방법을 보여주는 튜토리얼도 있습니다.

다른 팁

AJAX 라이브러리를 사용하는 좋은 방법은 Google의 AJAX 라이브러리 API 서비스.이는 JS를 다운로드하여 컴퓨터에 넣는 것보다 조금 더 빠르고 깔끔합니다. /static/ 폴더에 보관하고 디스크 할당량을 차지하지 않습니다.

자바스크립트에서는 다음과 같이 입력하면 됩니다.

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

및/또는

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

헤더 어딘가에 다음과 같은 내용을 넣을 수 있습니다.

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

이것이 Google의 API 라이브러리를 사용하는 데 필요한 전부입니다.

다음은 Google App Engine에서 Ajax를 구현한 방법이지만 이 아이디어는 다른 플랫폼에도 일반화될 수 있습니다.

우리는 대부분 JSON 응답으로 응답하는 Ajax 요청에 대한 핸들러 스크립트를 가지고 있습니다.구조는 다음과 같습니다(표준 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.

명령은 명령 패턴의 간단한 구현입니다.

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

클라이언트 측에서는 Ajax 대리자를 생성합니다.Prototype.js를 사용하면 이를 쉽게 작성하고 이해할 수 있습니다.다음은 발췌 내용입니다:

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

});

대리인에게 전화하려면 다음과 같이 하세요.

new AjaxApi(resultHandlerFunction, faultHandlerFunction).getFriends()

이게 도움이 되길 바란다!

GAE와 Google Web Toolkit(GWT)을 함께 사용하지 말아야 할 이유가 없습니다.백엔드 코드는 Python으로 작성하고 프런트엔드 코드는 Java(및 일부 JavaScript)로 작성한 다음 JavaScript로 컴파일합니다.다른 AJAX 프레임워크를 사용하는 경우 서버측 언어와 클라이언트측 언어 간에도 이러한 차이가 있습니다.

GWT에는 서버에서 Java 코드의 원격 호출을 더 쉽게 만드는 기능이 있지만 이는 전적으로 선택 사항입니다.다른 AJAX 프레임워크와 마찬가지로 JSON 또는 XML 인터페이스를 사용할 수 있습니다.

GWT 1.5에는 JavaScript 오버레이 유형도 함께 제공됩니다. 이를 통해 기본적으로 클라이언트 측 코드를 개발할 때 JSON 데이터를 Java 객체처럼 처리할 수 있습니다.이에 대해 더 자세히 읽을 수 있습니다. 여기.

업데이트:

이제 Google이 Google App Engine에 Java 지원을 추가했으므로 원하는 경우 전체 Google 스택에서 Java로 백엔드 및 프런트엔드 코드를 모두 개발할 수 있습니다.좋은 것이 있습니다 이클립스 플러그인 Google에서는 GAE, GWT 또는 둘 다를 사용하는 애플리케이션을 매우 쉽게 개발하고 배포할 수 있습니다.

클라이언트측 코드에 대해 순수 자바스크립트 프레임워크(아마도 Jquery)를 살펴보고 Python으로 JSON 서비스를 작성하는 것이 가장 쉽고 최선의 방법인 것 같습니다.

Google Web Toolkit을 사용하면 UI를 Java로 작성하고 이를 Javascript로 컴파일할 수 있습니다.Dave가 말했듯이 백엔드가 Java로 되어 있는 경우에는 해당 경우에 적합한 RPC 후크가 있기 때문에 더 나은 선택이 될 수 있습니다.

잠옷(Pajamas)을 살펴보고 싶을 수도 있습니다.http://pyjs.org/), 이는 "Python용 GWT"입니다.

또한 시도 GWT용 GQuery.이것은 자바 코드입니다:

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

Java 코드이므로 컴파일 시간(Java->JavaScript) 최적화가 다소 비싸고 리팩토링이 더 쉬워집니다.

좋아요, 그렇지 않나요?

jQuery는 훌륭한 라이브러리이지만 다음도 확인해 보세요. 프로토타입 JavaScript 프레임워크.이는 JavaScript를 가끔 어색한 언어에서 아름답고 우아한 언어로 바꿔줍니다.

JavaScript에서 Python으로 메소드 호출을 호출하려면, JSON-RPC Google App Engine과 잘 작동합니다.Google 기사 참조: "AJAX를 사용하여 클라이언트 RPC 요청 활성화", 자세한 내용은.

저는 현재 GAE 앱에 JQuery를 사용하고 있는데 제게는 아주 잘 작동합니다.저는 동적이며 Ajax 호출을 사용하여 JSON 문자열을 가져오는 차트(Google 차트)를 가지고 있습니다.나에게는 정말 잘 작동하는 것 같습니다.

Google은 최근 Google App Engine의 Java 버전을 발표했습니다.이 릴리스에서는 GWT를 사용하여 GAE 애플리케이션을 보다 쉽게 ​​개발할 수 있는 Eclipse 플러그인도 제공합니다.

자세한 내용은 여기에서 확인하세요: http://code.google.com/appengine/docs/java/overview.html

물론, Python 대신 Java로 애플리케이션을 다시 작성해야 하지만 GWT를 사용해 본 사람으로서 AJAX 코드베이스에서 최신 IDE를 사용하면 그만한 가치가 있다는 점을 말씀드리고 싶습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top