Rails, jQuery AJAX, respond_to, Google Chrome

Egy Rails alkalmazásom furcsa dolgot művelt Chrome böngészőn. jQuery-t használok AJAX hívásokhoz és a Rails respond_to része sehogyan sem akart js-ként válaszolni. Érintett böngésző még az Internet Explorer 7-től felfelé és azt hiszem Safari is, bár ezt nem tudtam tesztelni.

 jQuery.ajaxSetup({
   'beforeSend': function(xhr) {
     // First unset it, then set (which otherwise appends)
     xhr.setRequestHeader("Accept", "");
     xhr.setRequestHeader("Accept", "text/javascript");
     }
 });

Ez valamiért nincs hatással a fent nevezett böngészőkre. Hosszas keresgélés és egy zuhany alatt kipatant ötlet eredményeként az application_controller-ben megszületett az alábbi néhány kódsor:

   def correct_safari_and_ie_accept_headers
     request.accepts.sort!{ |x, y| y.to_s == 'text/javascript' ? 1 : -1 } if request.xhr?
   end

Valószínűleg nem csak én használok jQuery-t Rails-el. Remélem, másnak is hasznos lesz ez az igazán rövid és hatásos megoldás. Apró megjegyzés, bár szerintem magától értetődő, hogy a fenti funkciót egy before_filter segítségével meg kell hívni

Hozzászólások

És még egy megjegyzés HUP-ra: Nagyon kellene már egy kódkiemelő szűrő.


jQuery.ajaxSetup({
  'beforeSend': function(xhr) {
  // First unset it, then set (which otherwise appends)
  xhr.setRequestHeader("Accept", "");
  xhr.setRequestHeader("Accept", "text/javascript");
  }
});

ps: tudom hogy syntax highlight-ra gondoltal, de rovid kodnal eleg a behuzas, a hosszut meg linkeld erre szakosodott oldalakrol, pl. http://pastebin.com

Tyrael

Pastebin.com-ot én annak ellenére kezdem nem szeretni, hogy van hup private pastebin. Ugyanis néha szükség van nemstandard karaktereket (ő,ű) tartalmazó szövegek postolására is, amit a pastebin.com rosszul kezel. Pastebin.ca jobb. :)

Vagy kimondottan forráskódra lehet használni a codepad.org-ot is.