Alan Larkin
2009-Jan-10  13:10 UTC
[Facebooker-talk] Showing updated facebook_messages after Ajax failure
I''m trying to work out how to update facebook_messages when an Ajax
request fails.
I thought I would do something based on the Ajax/JSON example in
Mangino''s book.
  So I created a created a partial which simply renders facebook_messages:
# views/shared/_messages.fbml.erb
<div id="messages">
   <%= facebook_messages %>
</div>
In my controller''s error handling section I do something like:
respond_to do |format|
   format.json do
     flash[:error] = ''An error message''
     render :json => { :ids => [:messages],
                       :fbml_messages => render_to_string(:partial => 
''shared/messages.fbml.erb'')
     }, :status => 500
   end
end
And in my view use:
"function(data) {
   for(var i = 0; i < data["ids"].length; i++) {
     var id = data["ids"][i];
     $(id).setInnerFBML(data["fbml_" + id]);
   }
}"
as the failure callback.
However, unlike the success callback, the failure callback does not receive any 
arguments, so the message partial which was rendered to string is unavailable 
and thus cannot be used to update the page!
If instead I try to use fb:js-string to convert the FBML for displaying the 
facebook_messages to a Javascript variable, it will only be evaluated once, when
the page loads, and thus not show any subsequent updates of the flash variables 
due to Ajax requests.
So what the hell does one do??
-- 
<a href="http://wikimediafoundation.org/wiki/Donate/en"><img
border="0"
alt="Wikipedia Affiliate Button" 
src="http://upload.wikimedia.org/wikipedia/foundation/5/58/2008_fundraiser_micro_button-en.png"
/></a>