OpenRico_ is a Javascript for Rich Application library including ajax, drag&drop and many visual effects. Here explains ajax servlet with OpenRico. The Ajax Servlet library AjaxServlet.py:: from WebKit.RPCServlet import RPCServlet class AjaxServlet(RPCServlet): def awake(self, transaction): RPCServlet.awake(self, transaction) self._response = transaction.response() self._request = transaction.request() self._session = transaction.session() self._resp = [] def sleep(self, transaction): RPCServlet.sleep(self, transaction) self._response = None self._request = None self._session = None self._resp = None def respondToGet(self, trans): try: # ajax servlet don't need cache resp = self.response() resp.setHeader('Cache-Control', 'no-cache') resp.setHeader('Pragma', 'no-cache'); self.writeln('') self._respond() self.writeln('') self.sendOK('text/xml', ''.join(self._resp), trans) finally: pass # do error handling or database release def request(self): return self._request def response(self): return self._response def transaction(self): return self._transaction def _respond(self): """ Here goes the response self.write('Here is ajax response!!') NOTE: You must call responseToElement() or responseToObject() before write something """ raise NotImplementedError def responseToElement(self, elementId): self.write('' % elementId) def responseToObject(self, objectId): self.write('' % objectId) def write(self, *args): for arg in args: self._resp.append(self.encode(str(arg))) def writeln(self, *args): self.write(*args) self.write("\n") def decode(self, str, encoding='euc-kr'): """ Decode JavaScript quoted string to native string """ ret = [] while s: if s[:2].lower() == '%u': # 유니코드 인코딩 char = s[:6] unicode_chr = int( char[2:], 16) try: ret.append( unichr(unicode_chr).encode(encoding) ) except UnicodeEncodeError: ret.append( '&#%s;' % unicode_chr ) s = s[6:] else: ret.append( s[0] ) s = s[1:] return ''.join(ret) def encode(self, str, encoding='euc-kr'): """ Encode string to HTML unicode representation """ p = string.printable ret = [] for c in unicode(str, encoding): if c in p: ret.append(c) else: ret.append( '&#%d;' % ord(c) ) return ''.join(ret) search zipcode servlet example::: from AjaxServlet import * from Zipcode import * class ajax_search_zipcode(AjaxServlet): def _respond(self): self.responseToElement('search_result') zipcode_list = Zipcode.search(self.decode(self.request().field('dong'))) self.write("""\n""") for z in zipcode_list: self.write( """\n""" % ( z[0], z[1], z[2], z[3], z[4], z[0], z[1] + z[2] + z[3] ) ) self.write('
우편번호 주 소 선택
%s %s %s %s %s
') for real working example: 1. goto http://www.bodd.co.kr/member_register (only korean site) 2. click |image| button. 3. input "신림9" and click first button .. |image| image:: http://www.bodd.co.kr/image/btn_zipcodesearch.jpg -- whitekid_