2013-02-03 93 views
2

我有一個表單提交通過ajax。如果表單成功提交,該頁面將重定向到其他地方。如果表單失敗,我會使用partials(.js.erb)和內聯錯誤重新提交表單。

這工作正常。

即時通訊問題是我想不得不發送一些類型的JSON響應/數據返回到application.js頁面重新顯示時。只是,我不知道這是否可能。

//application.js

$(document).on('click','#sumbit_div',function(e) { 
$.ajax({ 
    url: '/create', 
    type: 'post', 
    dataType: 'script', 
    data: $('#the_form').serialize(), 
    cache: false, 
    success: function(xhr,data) { 
    console.log('success'); 
    }, 
    error: function(data) { 
    console.log('error') 
    console.log(data.value_from_format_json); 
    }, 
}); 
}); 

//創建在控制器動作。

rescue ActiveRecord::RecordInvalid => e 

respond_to do |format| 
format.json {render :json => { :status => 403,:success => false }} 
format.js 
end 

我認識到,即使失敗的提交是在.ajax響應中的成功。我可以處理如何處理後。現在我只想知道我是否能夠完成即時消息。

最後一點是這是在軌道2.3(仍在升級過程中)。但我有所有jquery庫(rails.js/jquery.js/etc)更新與ujs一起使用。

感謝

回答

2

你不應該數據發送的application.js而是具有的application.js 從DOM。讓你的create.js.erb修改DOM,以便application.js捕獲它。

或者甚至更好,從你的create.js.erb調用你想要的函數傳遞你想要的參數。

+0

你基本上說不用json嗎?在控制器@var =「要發送的東西」中,然後在.js.erb中的函數中定義它,並在application.js中調用該函數?我的錯誤是 – user1004277

+0

。向後讀,從js.erb調用ap.js中的函數。但使用該方法,我如何發送來自js.erb的數據在application.js中被拾取?一些函數(一些,參數,傳遞)? – user1004277

+0

愚蠢的例子,但你會得到它: 如果application.js定義了一個名爲'logRabbits()'的函數,你可以在你的create.js.erb:logRabbits('<%= @ rabbits.count%>') – mathieugagne

0

我想你需要將您的dataType更改爲json以獲得js響應的「json」響應或「js」。

+0

將數據類型更改爲json打破.js.erb – user1004277

+0

正確的方式是,將其設置爲json以使服務器使用json進行響應。 – cpuguy83