2013-02-23 13 views
5

在我的一個項目,代碼:爲什麼需要添加「數據:{類型:‘腳本’}」在遠程鏈路與導軌/ AJAX

= link_to "add", new_me_category_path, class: "btn btn-success", remote: true 

可以正確加載遠程形式。

但有些人不能工作,瀏覽器並沒有執行相應的js代碼。我需要添加「data:{type:」script「}」「像這樣:

= link_to "add", new_me_category_path, class: "btn btn-success", remote: true, data: {type: "script"} 

我想知道原因。

+0

你可以添加更多的代碼嗎? – Kamil 2013-02-27 14:59:05

回答

4

我不是JS專家,我不知道紅寶石,但我認爲:

當數據類型設置爲script - 下載的代碼加載並立即執行。

當數據類型是默認的(html) - 下載的代碼剛剛加載到瀏覽器中。你必須「手動」執行它(例如通過調用一些函數)。

如果您的代碼只是爲了與以前加載代碼中使用的一些功能 - 這些功能將可用,並且將工作(當數據類型是html)。

如果代碼中有定義的事件 - 它們將不起作用,因爲它們沒有被初始化,因爲沒有執行代碼。

如果我的解釋不好 - 您可以閱讀jQuery.get()jQuery.getScript()方法之間的區別。

1

如果您正在加載腳本,則正確的模板應該有.ejs擴展名(或渲染原始腳本,例如:render js: 'some code')。你必須在這樣的EJS模板使用j逃脫HTML:

template.ejs

$('some selector').html('<%= j render('some template') %>'); 

請你也給我的網址。正確的應該以.js結尾。

2

在幕後,jQuery的ajax方法用於:http://api.jquery.com/jquery.ajax/由UJS https://github.com/rails/jquery-ujs只要鏈接的data-remote="true"屬性設置,這是remote: true完成。

如文檔中所述,Ajax的確定HTTP接受頭中發送並解釋基於所述dataTypeaccepts參數傳遞給ajax(),其在這裏是從由UJS錨的data-屬性採取的返回值。

如果沒有通過data-type屬性設置dataType,jQuery會「智能地」推斷請求和響應類型。這可以解釋不一致性,如果你沒有明確指定它。

相關問題