Hello, Using I am using the Ajax.PeriodicalUpdater, and it is working great. How do I test to see if the content has changed from the last request? Thanks, Terry riegel --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
Christophe Porteneuve
2007-Jun-09 20:43 UTC
Re: Checking for changes with Ajax.PeriodicalUpdater
Hey, Terry Riegel a écrit :> Using I am using the Ajax.PeriodicalUpdater, and it is working great. > How do I test to see if the content has changed from the last request?Well, why do you need to? At any rate, it''s a simple matter of saving the last responseText and comparing it to the new one. It does keep it in its lastText property, btw. -- Christophe Porteneuve a.k.a. TDD "[They] did not know it was impossible, so they did it." --Mark Twain Email: tdd-x+CfDp/qHev2eFz/2MeuCQ@public.gmane.org --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
Ajax.PeriodicalUpdater does not extend from Ajax.Updater, so it does not support the evalJSON, and other methods, is that correct? So you are limited in someways, with respect to Ajax.Request Feel free to slap me around Chris (go easy though :) )... I''d try this by running a PeriodicalExecuter which called an Ajax.Request method. Then inside of the Ajax.Request parse the return JSON (or whatever return form you are using), place the value in the target DIV, and also place the value in a hidden Form element. Each call of Ajax.Request at the specified interval could then check the hidden Form value (last value updated), and you could perform your comparison with the new value, then complete whatever new DOM manipulation you intended if the val had changed. (never used lastText, lastResponseText, but that seems more elegant than placing it in a Form element. Is the above method violate any best practices? I''m trying to always pass JSON, and Ajax.PeriodicalUpdater does not allow that as far as I read. Always would like to hear other options myself) cheers, Mark On 6/9/07, Christophe Porteneuve <tdd-x+CfDp/qHev2eFz/2MeuCQ@public.gmane.org> wrote:> > > Hey, > > Terry Riegel a écrit : > > Using I am using the Ajax.PeriodicalUpdater, and it is working great. > > How do I test to see if the content has changed from the last request? > > Well, why do you need to? At any rate, it''s a simple matter of saving > the last responseText and comparing it to the new one. It does keep it > in its lastText property, btw. > > -- > Christophe Porteneuve a.k.a. TDD > "[They] did not know it was impossible, so they did it." --Mark Twain > Email: tdd-x+CfDp/qHev2eFz/2MeuCQ@public.gmane.org > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
example code to explain in detail what I mean... Chris is certainly more experienced than I, but this works, Terry.: <body id="partners" > <input type="hidden" id="hdElem" value=""> <div><input type="text" id=''someFormElement'' value="This will update every 5 seconds" size="45"></div> <div id=''someElement'' style="height:70%;background-color:white;clear:left;">This will update every 5 seconds</div> </body> <script type="text/javascript"> new PeriodicalExecuter ( function(pe) { var url = "getValFromServer"; //server side file var pars = "FORM.something=" + "hello"; //in case you wanted to pass params new Ajax.Request (url, { method: ''post'', parameters: pars, onSuccess: function(transport){ var jsontimestr transport.responseText.evalJSON(true); // store value in a hidden Form element: if (jsontimestr.latestValFromServer =$(''hdElem'').value) { alert("values were the same"); } else { //update page $(''someFormElement'').value jsontimestr.latestValFromServer; $(''hdElem'').value jsontimestr.latestValFromServer; $(''someElement'').innerHTML jsontimestr.latestValFromServer; } } }); }, 5); // execute every 5 seconds </script> ...would like to hear any thoughts. cheers, -Mark On 6/9/07, Mark Holton <holtonma-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Ajax.PeriodicalUpdater does not extend from Ajax.Updater, so it does not > support the evalJSON, and other methods, is that correct? So you are > limited in someways, with respect to Ajax.Request > > Feel free to slap me around Chris (go easy though :) )... I''d try this by > running a PeriodicalExecuter which called an Ajax.Request method. Then > inside of the Ajax.Request parse the return JSON (or whatever return form > you are using), place the value in the target DIV, and also place the value > in a hidden Form element. Each call of Ajax.Request at the specified > interval could then check the hidden Form value (last value updated), and > you could perform your comparison with the new value, then complete whatever > new DOM manipulation you intended if the val had changed. > > (never used lastText, lastResponseText, but that seems more elegant than > placing it in a Form element. Is the above method violate any best > practices? I''m trying to always pass JSON, and Ajax.PeriodicalUpdaterdoes not allow that as far as I read. Always would like to hear other > options myself) > > cheers, > Mark > > On 6/9/07, Christophe Porteneuve <tdd-x+CfDp/qHev2eFz/2MeuCQ@public.gmane.org> wrote: > > > > > > Hey, > > > > Terry Riegel a écrit : > > > Using I am using the Ajax.PeriodicalUpdater, and it is working great. > > > How do I test to see if the content has changed from the last request? > > > > Well, why do you need to? At any rate, it''s a simple matter of saving > > the last responseText and comparing it to the new one. It does keep it > > in its lastText property, btw. > > > > -- > > Christophe Porteneuve a.k.a. TDD > > "[They] did not know it was impossible, so they did it." --Mark Twain > > Email: tdd-x+CfDp/qHev2eFz/2MeuCQ@public.gmane.org > > > > > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---
Another related possibility, Terry, is that you could use Form.Element.Observer to check the value of a Form element periodically, then if the value changed (due to any update), it will trigger a callback that you define. For performance reasons, you probably want to be frugal about the number of polling pieces, but it''s a related option to your general question, and is an option that is available in PrototypeJS lib: Here''s a link if you''re interested: http://www.prototypejs.org/api/timedObserver new Form.Element.Observer( ''myelement'', 0.2, // 200 milliseconds function(el, value){ alert(''The form control has changed value to: '' + value) } ) On 6/9/07, Mark Holton <holtonma-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > example code to explain in detail what I mean... Chris is certainly more > experienced than I, but this works, Terry.: > > <body id="partners" > > <input type="hidden" id="hdElem" value=""> > <div><input type="text" id=''someFormElement'' value="This will update > every 5 seconds" size="45"></div> > <div id=''someElement'' > style="height:70%;background-color:white;clear:left;">This will update every > 5 seconds</div> > > </body> > > <script type="text/javascript"> > new PeriodicalExecuter > ( > function(pe) > { > var url = "getValFromServer"; //server side file > var pars = "FORM.something=" + "hello"; //in case you > wanted to pass params > new Ajax.Request (url, { > method: ''post'', > parameters: pars, > onSuccess: function(transport){ > var jsontimestr > transport.responseText.evalJSON(true); > // store value in a hidden Form element: > if (jsontimestr.latestValFromServer => $(''hdElem'').value) { > alert("values were the same"); > } else { > //update page > $(''someFormElement'').value > jsontimestr.latestValFromServer; > $(''hdElem'').value > jsontimestr.latestValFromServer; > $(''someElement'').innerHTML > jsontimestr.latestValFromServer; > } > > } > }); > > }, > 5); // execute every 5 seconds > </script> > > ...would like to hear any thoughts. > cheers, > -Mark > > > On 6/9/07, Mark Holton <holtonma-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org > wrote: > > > > Ajax.PeriodicalUpdater does not extend from Ajax.Updater, so it does not > > support the evalJSON, and other methods, is that correct? So you are > > limited in someways, with respect to Ajax.Request > > > > Feel free to slap me around Chris (go easy though :) )... I''d try this > > by running a PeriodicalExecuter which called an Ajax.Request method. > > Then inside of the Ajax.Request parse the return JSON (or whatever > > return form you are using), place the value in the target DIV, and also > > place the value in a hidden Form element. Each call of Ajax.Request at > > the specified interval could then check the hidden Form value (last value > > updated), and you could perform your comparison with the new value, then > > complete whatever new DOM manipulation you intended if the val had changed. > > > > (never used lastText, lastResponseText, but that seems more elegant than > > placing it in a Form element. Is the above method violate any best > > practices? I''m trying to always pass JSON, and Ajax.PeriodicalUpdaterdoes not allow that as far as I read. Always would like to hear other > > options myself) > > > > cheers, > > Mark > > > > On 6/9/07, Christophe Porteneuve < tdd-x+CfDp/qHev2eFz/2MeuCQ@public.gmane.org> wrote: > > > > > > > > > Hey, > > > > > > Terry Riegel a écrit : > > > > Using I am using the Ajax.PeriodicalUpdater, and it is working > > > great. > > > > How do I test to see if the content has changed from the last > > > request? > > > > > > Well, why do you need to? At any rate, it''s a simple matter of saving > > > > > > the last responseText and comparing it to the new one. It does keep > > > it > > > in its lastText property, btw. > > > > > > -- > > > Christophe Porteneuve a.k.a. TDD > > > "[They] did not know it was impossible, so they did it." --Mark Twain > > > Email: tdd-x+CfDp/qHev2eFz/2MeuCQ@public.gmane.org > > > > > > > > > > > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---