2011-04-02 65 views
0

所以我有一個自動填充字段,用戶可以選擇一個現有的或創建一個新的標籤。如果用戶創建新標籤,則他按下表單按鈕,並向視頻控制器中的更新操作發送POST請求,該請求將請求處理爲AJAX,並將標籤顯示在字段上方。爲什麼在這裏不會觸發ajax請求?

現在,問題是當用戶從建議列表中選擇標籤時。默認情況下,jQuery UI自動完成插件會將所選元素添加到該字段中,然後用戶必須按下表單按鈕。但是,我想通過在從建議列表中選擇標籤時自動添加標籤來爲用戶節省一些工作量。因此,我有這樣的代碼在我的application.js文件:

select: function(event, ui) { 
      var url = $('.edit_video').attr('action'); 
      var val = ui.item.topic.name; 
      $.ajax({type:"PUT", url:url, data:{video:{topic_names:val}}}); 
      return false; 
     } 

當從列表中選擇一個元素,成功地將一個PUT請求更新操作。但是,請求不作爲AJAX處理。該標籤已成功添加,但僅限於頁面刷新後。我希望將請求作爲AJAX進行處理。我怎樣才能做到這一點?

我猜這個問題與事實有關,當你按下窗體按鈕時,:remote => true選項會通知欄杆尋找format.js(在我的更新操作中有),但是當按鈕不是按下,並從列表中選擇一個元素,Rails不知道要查找JS。我如何讓它知道?

回答

0

我在這裏假設,通過不被處理爲AJAX的東西,您的意思是它不是呈現view.js.erb文件,而是呈現view.html.erb文件。您可以通過強制URL的格式在你的JS是這樣解決這個問題:

var url = $('.edit_video').attr('action') + ".js"; 

這將然後將其發送到正確的格式爲您的操作。

0

'protect_from_forgery'可能會阻止你離開帖子。您可以使用Firebug(使用Firefox)進行檢查。

0

我會檢查是否有任何東西綁定到$('。edit_video')在Firefox中。您可能會提交表單。

此外,JS可以在瀏覽器上禁用,因此它會降級到非Ajax。

最後檢查你是否在佈局文件中有jQuery和<%= csrf_meta_tag%>。祝你好運。

1

在你的Ajax請求中使用dataType:'script'應該有所幫助。

. 
. 
$.ajax({type:"PUT", url:url, dataType: 'script', data:{video:{topic_names:val}}}); 
. 

這將添加正確的標題,讓導軌識別正確的答案格式。

相關問題