2010-09-24 126 views
3

我有一個運行rails 2.3.8的RoR應用程序,它使用Rails 3風格的UJS綁定數據遠程窗體而不是使用form_for_remote,控制器響應一個js.erb來自服務器的文件。Rails UJS在IE中渲染js.erb模板

在FF,Chrome和Safari中都很漂亮,但在IE中運行時會提示您保存文件並不執行JS。到目前爲止,我的研究沒有發現任何可能的原因,所以任何幫助將不勝感激!

這裏是我的控制器操作:

def create 
    @note = Note.create(params[:note].merge(:author_id => current_user.id)) 
    respond_to do |format| 
     format.js {} 
    end 
    end 

我也試過,而不是具有相同結果的respond_to塊這樣的:

render :template => "notes/create.js.erb", :content_type => 'text/javascript' 

而且我create.js.erb:

$('#notes').append('<%= escape_javascript(render(:partial => "notes/note", :locals => {:note => @note}))%>'); 
$('.new_note textarea').val(''); 

這一切都非常簡單直接,我真的沒有得到什麼問題與IE瀏覽器。

感謝您的幫助!

編輯:

的Form帖子注:

<% form_for @note, :url => notes_path, :html => { 'data-remote' => true, :class =>   
    'new_note'} do |f|%> 
    <%= f.hidden_field :parent_id %> 
    <%= hidden_field_tag :note_type, note_type%> 
    <%= f.text_area :body, :size => size%> 
    <br/> 
    <%= f.submit "Add Note"%> 
<% end %> 

而且rails.js的relelvent部分:內容類型:

$('form[data-remote]').live('submit', function (e) { 
    $(this).callRemote(); 
    e.preventDefault(); 
}); 

/** 
    * Handles execution of remote calls firing overridable events along the way 
    */ 
    callRemote: function() { 
     var el  = this, 
      method = el.attr('method') || el.attr('data-method') || 'GET', 
      url  = el.attr('action') || el.attr('href'), 
      dataType = el.attr('data-type') || 'script'; 

     if (url === undefined) { 
      throw "No URL specified for remote call (action or href must be present)."; 
     } else { 
      if (el.triggerAndReturn('ajax:before')) { 
       var data = el.is('form') ? el.serializeArray() : []; 
       $.ajax({ 
        url: url, 
        data: data, 
        dataType: dataType, 
        type: method.toUpperCase(), 
        beforeSend: function (xhr) { 
         el.trigger('ajax:loading', xhr); 
        }, 
        success: function (data, status, xhr) { 
         el.trigger('ajax:success', [data, status, xhr]); 
        }, 
        complete: function (xhr) { 
         el.trigger('ajax:complete', xhr); 
        }, 
        error: function (xhr, status, error) { 
         el.trigger('ajax:failure', [xhr, status, error]); 
        } 
       }); 
      } 

      el.trigger('ajax:after'); 
     } 
    } 

服務器響應文本/ JavaScript的; charset = utf-8

我試過顯式設置rails.js helper的數據類型,但是這並沒有改變任何東西。

+0

在哪個IE版本中不起作用?我用IE8檢查它,它適用於我(rails 2.3.8,jquery UJS,HAML模板,並且在'respond_to'塊中的'format.js'後沒有'{}'。) – Voldy 2010-09-25 15:03:14

+0

這對我而言IE8兼容模式,我也嘗試在我的format.js上丟失{},但是我得到相同的結果,它會提示保存文件。 – Chelsea 2010-09-25 16:33:41

+0

你可以顯示「創建」的鏈接嗎? 'head'裏有什麼javascript? – Voldy 2010-09-25 19:05:50

回答

1

顯然這裏的解決方案是隻是在一個不同的版本rails.js的交換

不知道爲什麼一個我沒有工作,但看起來它是不是一個錯誤的任何代碼以上。

0

很高興知道您使用哪個版本解決問題。

更新:好的,所以我的方案是我使用jQuery 1.4.2與最新的rails.js。當我升級到jQuery 1.4.3這解決了我的問題。

+0

我不太確定我切換到哪個版本,只是從以前的項目中抓取了一個。來自這裏的最新應該是好的:http://github.com/rails/jquery-ujs – Chelsea 2010-10-19 19:10:00