<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>chao's clips tagged ajax</title>
    <description>Clips and Links</description>
    <link>http://clipclip.org/chao/clips/tag/ajax</link>
    <item>
      <title>Dmytro Shteflyuk’s Home » In-place file upload with Ruby on Rails</title>
      <link>http://clipclip.org/chao/clips/detail/12150</link>
      <category>ajax, upload</category>
      <pubDate>Thu, 28 Dec 2006 18:02:13 -0000</pubDate>
      <guid>http://clipclip.org/chao/clips/detail/12150</guid>
      <description>&lt;div&gt;Clipped by &lt;a href="http://clipclip.org/chao"&gt;chao&lt;/a&gt; to &lt;span class='c2_activity_link'&gt;&lt;a href="http://clipclip.org/activity/view/44/develop-a-ruby-on-rails-web-app"&gt;develop a ruby on rails web app&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;    &lt;div&gt;
&lt;div id='wrapper'&gt;
&lt;div id='content'&gt;
&lt;div style='caption-side : top;color : rgb(0, 0, 0);cursor : auto;direction : ltr;empty-cells : show;font-family : &amp;quot;Lucida Sans Unicode&amp;quot;,Tahoma,Arial,sans-serif;font-size : 13.8667px;font-size-adjust : none;font-style : normal;font-variant : normal;font-weight : 400;letter-spacing : normal;line-height : normal;list-style-image : none;list-style-position : outside;list-style-type : disc;text-align : left;text-indent : 0px;text-transform : none;white-space : normal;word-spacing : normal;background-color: rgb(255, 255, 227);' class='post' id='post-63' clipisparent='true'&gt;
                        &lt;!--Start Snippet
            --&gt;
&lt;h2 class='posttitle'&gt;
              &lt;a href='http://kpumuk.info/ruby-on-rails/in-place-file-upload-with-ruby-on-rails/' title='Permanent link to In-place file upload with Ruby on Rails' rel='bookmark'&gt;In-place
file upload with Ruby on Rails&lt;/a&gt;
            &lt;/h2&gt;
&lt;p class='postdate'&gt;October 28th, 2006 at 3.10 pm (&lt;a href='http://kpumuk.info/category/ajax/' title='View all posts in AJAX' rel='category tag'&gt;AJAX&lt;/a&gt;, &lt;a href='http://kpumuk.info/category/ruby-on-rails/' title='View all posts in Ruby on Rails' rel='category tag'&gt;Ruby on
Rails&lt;/a&gt;, &lt;a href='http://kpumuk.info/category/development/' title='View all posts in Development' rel='category tag'&gt;Development&lt;/a&gt;) · &lt;a href='http://kpumuk.info/ruby-on-rails/in-place-file-upload-with-ruby-on-rails/lang/ru/'&gt;
&lt;img title='Рус' src='http://kpumuk.info/wp-content/plugins/polyglot_flags/ru.png' alt='Рус' &gt;&lt;/img&gt;
              &lt;/a&gt; (3,010 Views)&lt;/p&gt;
&lt;div style='text-align: center;'&gt; &lt;iframe name='google_ads_frame' allowtransparency='true' src='http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4660813012168983&amp;amp;dt=1167328835055&amp;amp;lmt=1167328831&amp;amp;format=468x60_as&amp;amp;output=html&amp;amp;channel=0248897571&amp;amp;url=http%3A%2F%2Fkpumuk.info%2Fruby-on-rails%2Fin-place-file-upload-with-ruby-on-rails%2F&amp;amp;color_bg=333333&amp;amp;color_text=E6E6E6&amp;amp;color_link=E1771E&amp;amp;color_url=80FF00&amp;amp;color_border=78B749&amp;amp;ad_type=text_image&amp;amp;cc=100&amp;amp;u_h=1050&amp;amp;u_w=1680&amp;amp;u_ah=1028&amp;amp;u_aw=1636&amp;amp;u_cd=32&amp;amp;u_tz=-480&amp;amp;u_his=1&amp;amp;u_java=true&amp;amp;u_nplug=8&amp;amp;u_nmime=126' vspace='0' marginwidth='0' frameborder='0' height='60' hspace='0' style='display: none;' marginheight='0' scrolling='no' width='468' &gt;&lt;/iframe&gt;
            &lt;/div&gt;
&lt;div class='postentry'&gt;
&lt;p&gt;My friends often asked me how to upload file using AJAX, and
usually they got answer “in no way”. Correct answer, but what if I
need to upload file without full page reloading? And, of course, I
want to use RJS in this case. Here I’ll explain what to do to get
effect very similar to AJAX file upload (btw, &lt;a href='http://gmail.google.com/' target='_blank'&gt;Gmail&lt;/a&gt; uses this
technique).&lt;/p&gt;
&lt;p&gt;
                &lt;a id='more-63' &gt;&lt;/a&gt;
              &lt;/p&gt;
&lt;p&gt;First of all, do you know, that &lt;tt&gt;form&lt;/tt&gt; element has
attribute &lt;tt&gt;target&lt;/tt&gt;? If you specify it your form will be
submitted into frame with name entered in &lt;tt&gt;target&lt;/tt&gt;
attribute. Of course, this frame can be &lt;tt&gt;iframe&lt;/tt&gt;, and it can
be hidden! Look at the following chunk of HTML code:&lt;/p&gt;
&lt;div class='codecolorer-container html'&gt;
&lt;div class='codecolorer' style='font-family: monospace;'&gt;
&lt;span class='sc2'&gt;
                    &lt;a href='http://december.com/html/4/element/form.html'&gt;
                      &lt;span class='kw2'&gt;&amp;lt;form&lt;/span&gt;
                    &lt;/a&gt; &lt;span class='kw3'&gt;target&lt;/span&gt;=&lt;span class='st0'&gt;"upload_frame"&lt;/span&gt;
&lt;span class='kw3'&gt;action&lt;/span&gt;=&lt;span class='st0'&gt;"/test/upload_action"&lt;/span&gt; &lt;span class='kw3'&gt;id&lt;/span&gt;=&lt;span class='st0'&gt;"upload_form"&lt;/span&gt;
                    &lt;span class='kw2'&gt;&amp;gt;&lt;/span&gt;
                  &lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&amp;nbsp; &lt;span class='sc2'&gt;
                    &lt;a href='http://december.com/html/4/element/input.html'&gt;
                      &lt;span class='kw2'&gt;&amp;lt;input&lt;/span&gt;
                    &lt;/a&gt; &lt;span class='kw3'&gt;type&lt;/span&gt;=&lt;span class='st0'&gt;"file"&lt;/span&gt; &lt;span class='kw3'&gt;name&lt;/span&gt;=&lt;span class='st0'&gt;"uploaded_file"&lt;/span&gt;
/&lt;span class='kw2'&gt;&amp;gt;&lt;/span&gt;
                  &lt;/span&gt;
                  &lt;span class='sc2'&gt;
                    &lt;a href='http://december.com/html/4/element/br.html'&gt;
                      &lt;span class='kw2'&gt;&amp;lt;br&lt;/span&gt;
                    &lt;/a&gt; /&lt;span class='kw2'&gt;&amp;gt;&lt;/span&gt;
                  &lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&amp;nbsp; &lt;span class='sc2'&gt;
                    &lt;a href='http://december.com/html/4/element/input.html'&gt;
                      &lt;span class='kw2'&gt;&amp;lt;input&lt;/span&gt;
                    &lt;/a&gt; &lt;span class='kw3'&gt;type&lt;/span&gt;=&lt;span class='st0'&gt;"submit"&lt;/span&gt; /&lt;span class='kw2'&gt;&amp;gt;&lt;/span&gt;
                  &lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&lt;span class='sc2'&gt;
                    &lt;span class='kw2'&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
                  &lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&lt;span class='sc2'&gt;
                    &lt;a href='http://december.com/html/4/element/iframe.html'&gt;
                      &lt;span class='kw2'&gt;&amp;lt;iframe&lt;/span&gt;
                    &lt;/a&gt; &lt;span class='kw3'&gt;id&lt;/span&gt;=&lt;span class='st0'&gt;"upload_frame"&lt;/span&gt;
&lt;span class='kw3'&gt;name&lt;/span&gt;=&lt;span class='st0'&gt;"upload_frame"&lt;/span&gt; &lt;span class='kw3'&gt;style&lt;/span&gt;=&lt;span class='st0'&gt;"display:
none"&lt;/span&gt;
                    &lt;span class='kw2'&gt;&amp;gt;&lt;/span&gt;
                  &lt;/span&gt;
                  &lt;span class='sc2'&gt;
                    &lt;span class='kw2'&gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
                  &lt;/span&gt;
                &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;When you click the “Submit” button, form will be submitted to
hidden &lt;tt&gt;iframe&lt;/tt&gt; and controller’s action will be called. But
resulting RJS will be returned into the hidden frame! We need to
get full respond and execute it in context of whole page (parent
window for our frame). There is one interesting technique exists:
&lt;a href='http://developer.apple.com/internet/webcontent/iframe.html' target='_blank'&gt;http://developer.apple.com/internet/webcontent/iframe.html&lt;/a&gt;,
and it’s implementation as Ruby on Rails plugin &lt;a href='http://sean.treadway.info/articles/2006/05/29/iframe-remoting-made-easy' target='_blank'&gt;here&lt;/a&gt;. Example of using:&lt;/p&gt;
&lt;div class='codecolorer-container ruby'&gt;
&lt;div class='codecolorer' style='font-family: monospace;'&gt;
&lt;span class='kw1'&gt;class&lt;/span&gt; TestController &amp;lt;
ActionController:&lt;span class='re0'&gt;:Base&lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&amp;nbsp; &lt;span class='kw1'&gt;def&lt;/span&gt; &lt;span class='re1'&gt;upload_action&lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&amp;nbsp; &amp;nbsp; &lt;span class='co1'&gt;# Do stuff with
params[:uploaded_file]&lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&lt;br &gt;&lt;/br&gt;
&amp;nbsp; &amp;nbsp; responds_to_parent &lt;span class='kw1'&gt;do&lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; render &lt;span class='re0'&gt;:update&lt;/span&gt;
&lt;span class='kw1'&gt;do&lt;/span&gt; |page|&lt;br &gt;&lt;/br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; page.&lt;span class='me1'&gt;replace_html&lt;/span&gt; &lt;span class='st0'&gt;'upload_form'&lt;/span&gt;,
&lt;span class='re0'&gt;:partial&lt;/span&gt; =&amp;gt; &lt;span class='st0'&gt;'upload_form'&lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class='kw1'&gt;end&lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&amp;nbsp; &amp;nbsp; &lt;span class='kw1'&gt;end&lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&amp;nbsp; &lt;span class='kw1'&gt;end&lt;/span&gt;
                  &lt;br &gt;&lt;/br&gt;
&lt;span class='kw1'&gt;end&lt;/span&gt;
                &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It’s simple, right?&lt;/p&gt;
&lt;/div&gt;
            &lt;!--End Snippet
            --&gt;
          &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;style type='text/css'&gt;div#c2_inner_12019 p { margin: 1.2em 0pt; padding: 0pt; font-size: 1em; line-height: 1.5em; }
div#c2_inner_12019  h2{ margin: 1.2em 0pt; padding: 0pt; clear: both; color: rgb(78, 87, 6); font-family: Georgia,serif; }
div#c2_inner_12019  h2 { font-size: 1.6em; }
div#c2_inner_12019 a { text-decoration: none; }
div#c2_inner_12019 a:link { color: rgb(200, 108, 0); }
div#c2_inner_12019 a:visited, div#c2_inner_12019  a:active { color: rgb(178, 106, 22); }
div#c2_inner_12019 a:hover { background-color: rgb(78, 87, 6); color: rgb(255, 255, 255); }
div#c2_inner_12019  img { border: 0pt none ; margin: 0pt; padding: 0pt; }
div#c2_inner_12019 .posttitle { margin: 0.6em 0pt 0pt; padding: 0pt 0pt 0.1em; background: transparent url(images/underline.gif) no-repeat scroll 0pt 100%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; }
div#c2_inner_12019 .postdate { margin: 0.1em 0pt 1.2em; color: rgb(124, 125, 102); font-size: 0.92em; }
div#c2_inner_12019 tt { border-top: 1px dashed rgb(168, 181, 148); border-bottom: 1px dashed rgb(168, 181, 148); padding: 1px; background-color: rgb(245, 255, 216); color: rgb(0, 0, 0); font-family: verdana; font-size: 10px; }
div#c2_inner_12019 .html{ color: rgb(235, 235, 235); }
div#c2_inner_12019 .codecolorer { white-space: nowrap; }
div#c2_inner_12019 .codecolorer-container { overflow: auto; width: 460px; font-family: monospace; font-size: 12px; white-space: nowrap; }
div#c2_inner_12019 .codecolorer .kw1{ color: rgb(161, 161, 0); }
div#c2_inner_12019 .codecolorer .kw2{ color: rgb(0, 0, 0); font-weight: bold; }
div#c2_inner_12019 .codecolorer .kw3{ color: rgb(0, 0, 102); }
div#c2_inner_12019 .codecolorer .co1, div#c2_inner_12019  .codecolorer .co1{ color: rgb(128, 128, 128); }
div#c2_inner_12019 .codecolorer .st0{ color: rgb(255, 0, 0); }
div#c2_inner_12019 .ruby { color: rgb(255, 255, 255); }
div#c2_inner_12019 .ruby .codecolorer .kw1 { color: rgb(255, 102, 0); font-weight: bolder; }
div#c2_inner_12019 .ruby .codecolorer .st0 { color: rgb(102, 255, 0); }
div#c2_inner_12019 .ruby .codecolorer .re0 { color: rgb(51, 153, 153); }
div#c2_inner_12019 .ruby .codecolorer .re1 { color: rgb(255, 204, 0); }
div#c2_inner_12019 .ruby .codecolorer .co1, div#c2_inner_12019  .ruby .codecolorer .co1{ color: rgb(153, 51, 204); }
div#c2_inner_12019 .html .codecolorer .kw2 { color: rgb(51, 153, 153); }
div#c2_inner_12019 .html .codecolorer .kw3 { color: rgb(255, 102, 0); }
div#c2_inner_12019 .html .codecolorer .st0 { color: rgb(30, 200, 30); }
div#c2_inner_12019 .codecolorer-container { border: 1px solid rgb(204, 204, 204); margin: 10px; padding: 5px; background: rgb(0, 0, 0) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(255, 255, 255); }&lt;/style&gt;
    &lt;/div&gt;


</description>
      <author>chao</author>
    </item>
    <item>
      <title>jQuery: New Wave Javascript</title>
      <link>http://clipclip.org/chao/clips/detail/6445</link>
      <category>ajax, library</category>
      <pubDate>Tue, 13 Jun 2006 05:50:45 -0000</pubDate>
      <guid>http://clipclip.org/chao/clips/detail/6445</guid>
      <description>&lt;div&gt;Clipped by &lt;a href="http://clipclip.org/chao"&gt;chao&lt;/a&gt; to &lt;span class='c2_activity_link'&gt;&lt;a href="http://clipclip.org/activity/view/35/use-ajax-in-my-web-apps"&gt;use ajax in my web apps&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;div&gt;
&lt;div class="wrap"&gt;
&lt;div class="wrap2" clipisparent="true" style="caption-side : top;color : rgb(255, 255, 255);cursor : auto;direction : ltr;empty-cells : show;font-family : Arial;font-size : 16px;font-size-adjust : none;font-style : normal;font-variant : normal;font-weight : 400;letter-spacing : normal;line-height : normal;list-style-image : none;list-style-position : outside;list-style-type : disc;text-align : left;text-indent : 0px;text-transform : none;white-space : normal;word-spacing : normal;background-color: rgb(33, 33, 33);"&gt;
                        &lt;!--Start Snippet
            --&gt;
&lt;h1 style=""&gt;
              &lt;a href="http://jquery.com/"&gt;
                &lt;img src="http://jquery.com/images/hat2.gif" /&gt; jQuery&lt;/a&gt;
              &lt;br /&gt;
&lt;span&gt;New Wave Javascript&lt;/span&gt;
            &lt;/h1&gt;
&lt;br style="" /&gt;
&lt;p&gt;jQuery is a new type of Javascript library. It is not a huge,
bloated, framework promising the best in AJAX - nor is just a set
of needlessly complex enhancements - &lt;b&gt;jQuery is designed to
change the way that you write Javascript&lt;/b&gt;.&lt;/p&gt;
&lt;h2&gt;What is jQuery?&lt;/h2&gt;
&lt;p&gt;jQuery is a Javascript library that takes this motto to heart:
&lt;b&gt;Writing Javascript code should be fun.&lt;/b&gt; jQuery acheives this
goal by taking common, repetitive, tasks, stripping out all the
unnecessary markup, and leaving them short, smart and
understandable.&lt;/p&gt;
&lt;p&gt;What does jQuery code look like? &lt;strong&gt;The quick and
dirty:&lt;/strong&gt;
              &lt;br /&gt;
            &lt;/p&gt;
&lt;pre class="run"&gt;
$("p.surprise").addClass("ohmy").show("slow");&lt;input type="submit" value="» Run" /&gt;
&lt;/pre&gt;
&lt;p class="surprise"&gt;
              &lt;strong&gt;Congratulations!&lt;/strong&gt; You just ran
a snippet of jQuery code - wasn't that easy? There's lots of
example code throughout the &lt;strong&gt;
                &lt;a href="http://jquery.com/docs/"&gt;documentation&lt;/a&gt;
              &lt;/strong&gt;, on this site
- be sure to give all the code a test run, to see what happens.&lt;/p&gt;
&lt;p&gt;The above code snippet looks for all paragraphs that have a
class of 'surprise', adds the class 'ohmy' to them, then slowly
reveals them. Click the 'Run' button to see it in action!&lt;/p&gt;
&lt;p&gt;
              &lt;b&gt;Quick Facts:&lt;/b&gt;
            &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;jQuery supports &lt;a href="http://jquery.com/docs/CSS/"&gt;CSS
1-3&lt;/a&gt; and basic &lt;a href="http://jquery.com/docs/XPath/"&gt;XPath&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;jQuery is about &lt;a href="http://jquery.com/src/latest.js"&gt;10kb
in size&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;jQuery works in Internet Explorer, Firefox, Safari, and
Opera.&lt;/li&gt;
&lt;/ul&gt;
            &lt;!--End Snippet
            --&gt;
          &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;div#c2_inner_6438 h1, div#c2_inner_6438  h2 { margin: 0pt; padding: 0pt; }
div#c2_inner_6438 h1 a { color: rgb(255, 255, 255); text-decoration: none; }
div#c2_inner_6438 h1 img { border: 0px none ; margin: 5px 10px 0pt 0pt; float: left; }
div#c2_inner_6438 h1 span { font-size: 0.7em; }
div#c2_inner_6438 a { color: rgb(102, 153, 204); }
div#c2_inner_6438 b {  }
div#c2_inner_6438 p { line-height: 1.2em; }
div#c2_inner_6438 pre { padding: 5px; background: rgb(0, 0, 0) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 255, 0); margin-left: 2%; width: 96%; position: relative; }
div#c2_inner_6438 pre input { margin: 0pt; padding: 0pt; position: absolute; top: 2px; right: 2px; font-weight: bold; }
div#c2_inner_6438 p.surprise { display: none; }&lt;/style&gt;
    </description>
      <author>chao</author>
    </item>
    <item>
      <title>Using REST with Ajax</title>
      <link>http://clipclip.org/chao/clips/detail/1716</link>
      <category>ajax, rest, toread</category>
      <pubDate>Sat, 25 Feb 2006 06:04:19 -0000</pubDate>
      <guid>http://clipclip.org/chao/clips/detail/1716</guid>
      <description>&lt;div&gt;Clipped by &lt;a href="http://clipclip.org/chao"&gt;chao&lt;/a&gt; to &lt;span class='c2_activity_link'&gt;&lt;a href="http://clipclip.org/activity/view/35/use-ajax-in-my-web-apps"&gt;use ajax in my web apps&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;div&gt;
&lt;table cellspacing="0" border="0" cellpadding="0" width=""&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width=""&gt;
                &lt;span id="intelliTxt" clipisparent="true" style="caption-side : top;color : rgb(0, 0, 0);cursor : auto;direction : ltr;empty-cells : show;font-family : verdana,arial,helvetica,sans-serif;font-size : 12px;font-size-adjust : none;font-style : normal;font-variant : normal;font-weight : 400;letter-spacing : normal;line-height : normal;list-style-image : none;list-style-position : outside;list-style-type : disc;text-align : start;text-indent : 0px;text-transform : none;white-space : normal;word-spacing : normal;background-color: rgb(255, 255, 255);"&gt;
                                    &lt;!--Start Snippet
                  --&gt;
                &lt;/span&gt;
&lt;h2&gt;
                  &lt;span clip_style="caption-side : top;color : rgb(0, 0, 0);cursor : auto;direction : ltr;empty-cells : show;font-family : verdana,arial,helvetica,sans-serif;font-size : 12px;font-size-adjust : none;font-style : normal;font-variant : normal;font-weight : 400;letter-spacing : normal;line-height : normal;list-style-image : none;list-style-position : outside;list-style-type : disc;text-align : start;text-indent : 0px;text-transform : none;white-space : normal;word-spacing : normal;background-color: rgb(255, 255, 255);" id="intelliTxt" clipisparent="true"&gt;Using REST with
Ajax&lt;/span&gt;
                &lt;/h2&gt;
by &lt;a href="http://www.onlamp.com/pub/au/1269"&gt;Nic
Ferrier&lt;/a&gt;
                &lt;br /&gt;
02/23/2006
&lt;p&gt;This article shows how to use Ajax techniques to make web apps
with REST APIs.&lt;/p&gt;
&lt;table cellspacing="0" class="adtag" border="0" cellpadding="8" align="right" width="336"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
                                                &lt;!-- dy 
                        --&gt;
                        &lt;!-- begin ad tag 
                        --&gt;
&lt;noscript&gt;
                          &lt;a href="http://ad.doubleclick.net/jump/onlamp.ds/pythonart;sz=336x280;ord=123456789?" target="_blank"&gt;
                            &lt;img src="http://ad.doubleclick.net/ad/onlamp.ds/pythonart;sz=336x280;ord=123456789?" border="0" height="280" alt="" width="336" /&gt;
                          &lt;/a&gt;
                        &lt;/noscript&gt; 
                        &lt;!-- End ad tag 
                        --&gt;
                         &lt;!--
&lt;iframe src="http://ad.doubleclick.net/adi/onlamp.ds/pythonart;pos=_pythonart;sz=336x280;ord=2047940924?" width="336" height="280" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;
                                &lt;script type="text/javascript" language="JavaScript1.1" src="http://ad.doubleclick.net/adj/onlamp.ds/pythonart;abr=!ie;pos=_pythonart;sz=336x280;ord=2047940924?"&gt;&lt;/script&gt;
                                &lt;/iframe&gt;
                                &lt;noscript&gt;
                                &lt;a href="http://ad.doubleclick.net/jump/onlamp.ds/pythonart;abr=!ie;pos=_pythonart;sz=336x280;ord=2047940924?"&gt;&lt;img src="http://ad.doubleclick.net/ad/onlamp.ds/pythonart;abr=!ie;pos=_pythonart;sz=336x280;ord=2047940924?" border="0" width="336" height="280" alt="Advertisement" /&gt;&lt;/a&gt;
                                &lt;/noscript&gt;

                        --&gt;
                      &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Everyone's talking about REST these days. Lots of people are
still struggling with it, and there's good reason for that--REST is
actually quite difficult to fit into the browser-based HTML Web,
for two reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Current HTML forms support only &lt;code&gt;GET&lt;/code&gt; and
&lt;code&gt;POST&lt;/code&gt;, not &lt;code&gt;PUT&lt;/code&gt; or &lt;code&gt;DELETE&lt;/code&gt;
                  &lt;/li&gt;
&lt;li&gt;HTML forms always involve a page change&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As far as I'm concerned, this is fair enough; REST is primarily
a web services platform, an alternative to CORBA, SOAP, and XMLRPC,
not a user interface. Still, at least some of the time, it's nice
to use a REST API as the foundation for a web app. On the other
hand, Ajax can be really complicated, and it always seems to
involve lots of different bits of code.&lt;/p&gt;
&lt;p&gt;That is the point of this article. REST's clean definition of an
application's architecture solves at least some of the problems
with Ajax; and using Ajax to a REST web app leaves the REST API
uncomplicated and pure.&lt;/p&gt;
                &lt;!--End Snippet
                --&gt;
              &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
/* Start import from: http://www.oreillynet.com/styles/main.css */

div#c2_inner_1698  h2 {
    font-weight: bold;
    font-size: 17px;
}
div#c2_inner_1698 code{
    color: #003366;
}

/* End import from: http://www.oreillynet.com/styles/main.css */
&lt;/style&gt;
    </description>
      <author>chao</author>
    </item>
    <item>
      <title>Selenium Automated testing for Rails</title>
      <link>http://clipclip.org/chao/clips/detail/1002</link>
      <category>ajax, rails, testing</category>
      <pubDate>Fri, 23 Dec 2005 00:44:46 -0000</pubDate>
      <guid>http://clipclip.org/chao/clips/detail/1002</guid>
      <description>&lt;div&gt;Clipped by &lt;a href="http://clipclip.org/chao"&gt;chao&lt;/a&gt; to &lt;span class='c2_activity_link'&gt;&lt;a href="http://clipclip.org/activity/view/69/test-my-web2-0-app"&gt;test my web2.0 app&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;div&gt;
&lt;table cellspacing="0" id="v14-body-table" border="0" cellpadding="0" width=""&gt;
&lt;tbody&gt;
&lt;tr valign="top"&gt;
&lt;td width=""&gt;
&lt;table cellspacing="0" border="0" cellpadding="0" width=""&gt;
&lt;tbody&gt;
&lt;tr valign="top"&gt;
&lt;td clipisparent="true" style="caption-side : top;color : rgb(0, 0, 0);cursor : auto;direction : ltr;empty-cells : show;font-family : verdana,arial,sans-serif;font-size : 11px;font-size-adjust : none;font-style : normal;font-variant : normal;font-weight : 400;letter-spacing : normal;line-height : normal;list-style-image : none;list-style-position : outside;list-style-type : disc;text-align : start;text-indent : 0px;text-transform : none;white-space : normal;word-spacing : normal;background-color: rgb(255, 255, 255);" width=""&gt;
                                                &lt;!--Start Snippet
                        --&gt;
&lt;blockquote&gt;Acceptance, or functional, testing is designed to put
manual tasks through their paces, but testing these tasks by hand
can be time consuming and prone to human error. In this article,
the author shows architects, developers, and testers how to use the
Selenium testing tools to automate acceptance tests; automating the
tests saves times and helps eliminate tester mistakes. You also are
provided with an example of how to apply Selenium in a real-world
project using Ruby on Rails and Ajax.&lt;/blockquote&gt;
                        &lt;!--START RESERVED FOR FUTURE USE INCLUDE FILES
                        --&gt;
                                                &lt;!--END RESERVED FOR FUTURE USE INCLUDE FILES
                        --&gt;
                        &lt;!--End Snippet
                        --&gt;
                      &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
/* Start import from: http://www.ibm.com/common/v14/table.css */


/* End import from: http://www.ibm.com/common/v14/table.css */


/* Start import from: http://www.ibm.com/common/v14/main.css */


/* End import from: http://www.ibm.com/common/v14/main.css */


/* Start import from: http://www.ibm.com/common/v14/screen.css */


/* End import from: http://www.ibm.com/common/v14/screen.css */
&lt;/style&gt;
    </description>
      <author>chao</author>
    </item>
    <item>
      <title>AHAH</title>
      <link>http://clipclip.org/chao/clips/detail/682</link>
      <category>ajax, clipclip</category>
      <pubDate>Fri, 25 Nov 2005 00:58:49 -0000</pubDate>
      <guid>http://clipclip.org/chao/clips/detail/682</guid>
      <description>&lt;div&gt;Clipped by &lt;a href="http://clipclip.org/chao"&gt;chao&lt;/a&gt; to &lt;span class='c2_activity_link'&gt;&lt;a href="http://clipclip.org/activity/view/35/use-ajax-in-my-web-apps"&gt;use ajax in my web apps&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;div&gt;
&lt;div class="content" id="entries" clipisparent="true" style="caption-side : top;color : rgb(0, 0, 0);cursor : auto;direction : ltr;empty-cells : show;font-family : &amp;quot;Hoefler Text&amp;quot;,Palatino,serif;font-size : 17px;font-size-adjust : none;font-style : normal;font-variant : normal;font-weight : 400;letter-spacing : normal;line-height : normal;list-style-image : none;list-style-position : outside;list-style-type : disc;text-align : start;text-indent : 0px;text-transform : none;white-space : normal;word-spacing : normal;background-color: rgb(204, 204, 153);"&gt;
          &lt;!--Start Snippet
          --&gt;
&lt;h3&gt;JAH - Ajax without XML&lt;/h3&gt;
&lt;br /&gt;
&lt;div style="clear: both;"&gt;&lt;/div&gt;
With all the &lt;a href="http://technorati.com/tag/AJAX" rel="tag"&gt;AJAX&lt;/a&gt; &lt;a href="http://www.powazek.com/2005/05/000520.html"&gt;excitement&lt;/a&gt;, it's
worth pointing out a simple technique I call &lt;a href="http://technorati.com/tag/JAH" rel="tag"&gt;JAH&lt;/a&gt; - which can be
Just Async HTML, or Javascript Async HTML to taste.&lt;br /&gt;
&lt;br /&gt;
This works on the &lt;a href="http://developers.technorati.com/wiki/MicroFormat"&gt;microformat&lt;/a&gt;
principle that XHTML is XML, but with the added advantage that
Javascript already knows how to handle XHTML DOM's so no xml
parsing is required.&lt;br /&gt;
&lt;br /&gt;
You just include &lt;code&gt;&amp;lt;script language="javascript1.3"
src="jah.js" &amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt; in the
&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; and then link to dynamic pages with
&lt;code&gt;&amp;lt;a
href="javascript:jah('kevin.html','&lt;/code&gt;target');"&amp;gt;kevin&amp;lt;/a&amp;gt;
where &lt;code&gt;target&lt;/code&gt; is the &lt;code&gt;id&lt;/code&gt; of the HTML
element you want to replace.&lt;br /&gt;
&lt;br /&gt;
Here's &lt;a href="http://homepage.mac.com/kevinmarks/staticjah.html"&gt;a very simple
static example&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you want an elaborate dynamic example, &lt;a href="http://www.kottke.org/05/05/ajax-weblogs"&gt;go see Kottke&lt;/a&gt;, he
gets paid for this kind of thing.          &lt;!-- technorati tags start 
          --&gt;
&lt;p style="text-align: right; font-size: 10px;"&gt;&amp;nbsp;&lt;/p&gt;
          &lt;!--End Snippet
          --&gt;
        &lt;/div&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
/* Start import from: http://www.blogger.com/css/blog_controls.css */


/* End import from: http://www.blogger.com/css/blog_controls.css */


/* Start import from: http://www.blogger.com/dyn-css/authorization.css?blogID=3200930 */


/* End import from: http://www.blogger.com/dyn-css/authorization.css?blogID=3200930 */

div#c2_inner_676 { background-color: rgb(0, 102, 0); }
div#c2_inner_676 h3 { font-family: &amp;quot;Hoefler Text&amp;quot;,Palatino,serif; }
div#c2_inner_676 a { color: rgb(23, 8, 76); text-decoration: none; }
div#c2_inner_676 a:visited { color: rgb(64, 11, 70); }
div#c2_inner_676 a:hover { text-decoration: underline overline; }&lt;/style&gt;
    </description>
      <author>chao</author>
    </item>
  </channel>
</rss>
