2015-03-19 93 views
0

我在Rails應用程序中使用ajax。在我的應用程序的js我有在Rails 4中不執行Ajax響應

$('#request_name').on('focusout', function() { 
 
     var clientName = $(this).val(); 
 
     $.ajax({ 
 
    \t url: "/requests/autofill/"+clientName, 
 
\t type: "GET", 
 
    \t contentType: 'text/javascript'   
 
    \t });

所以我發送Ajax請求,請求控制器動作自動填充。

自動填充方法:

def autofill 
 
    @client = Client.where("name=?",params[:name]).take 
 
\t respond_to do |format| 
 
    \t format.js 
 
    \t format.html 
 
\t end 
 
end
在我autofill.js.erb文件我有:

alert("hello"); 
 
$('#request_mobile").val('hi there'); \t
(警告只是用於測試) 我想要什麼要做的就是在我的autofill.js.erb文件中使用一些值更新#request_mobile id字段。問題是我的autofill.js.erb代碼沒有被執行。 這裏是firebag所示的響應:

alert("hello"); 
 
$('#request_mobile").val('hi there');

但沒有任何反應,甚至警報未啓動。我不知道我做錯了什麼?

+0

你能用'ajax'請求顯示一些日誌文件嗎? – 2015-03-19 08:52:10

+0

@Зелёный,開始GET「/ requests/autofill/Jordane%20Koch」:: 1在2015-03-19 14:39:19 +0600 通過RequestsController處理#autofill as */* 參數:{「name」 (「Jordane Koch」)限制1 已提交的請求/ autofill.js.erb(0.1ms) 已完成在11ms內200 OK(查看:7.6ms | ActiveRecord:0.4ms)。這是你問的嗎? – yerassyl 2015-03-19 08:54:49

回答

1

我不認爲我完全明白這裏出了什麼問題,但我可以看到一些方法來接近理解問題。 首先,我相信用$.get代替$.ajax會更好。設置起來稍微複雜一些。

第二件事 - 你實際上不需要設置中的contentType param,因爲它不是關於返回數據的類型,而是你在請求中發送的數據類型。響應數據類型在dataType參數中設置。

第三件事,即使dataType設置爲script,我不確定它會被執行,所以最好的方法是手動完成,如果你100%確定你的安全。

最後,這是應該工作的。

$('#request_name').on('focusout', function() { 
    var clientName = $(this).val(); 
    $.get("/requests/autofill/"+clientName, function(data) { 
     eval(data); 
    } 
    );  
+0

如果在firebag的預覽中看到我的js代碼是否意味着我被執行了。例如,在控制檯響應中,請參閱document.getElementById('request_mobile')。value(「test value」);代碼並在預覽中查看document.getElementByID(測試值)。 – yerassyl 2015-03-19 09:39:48

+0

返回的JavaScript代碼默認情況下不會執行(安全第一),因此您得到的只是一串可輸出或計算的代碼或其他內容。 – Almaron 2015-03-19 10:02:26

+0

是否有執行該代碼的方法。我正在那樣做,因爲這種方法的圖騰樂曲。例如在railscast和Rails4敏捷web開發書中。 – yerassyl 2015-03-19 11:29:26

0

問題出在您的客戶端。當它收到Ajax響應時,它不會將其作爲javascript執行。它正在將它作爲文本執行。

加入返回false;後阿賈克斯

$('#request_name').on('focusout', function() { 
    var clientName = $(this).val(); 
    $.ajax({ 
    url: "/requests/autofill/"+clientName, 
    type: "GET", 
    contentType: 'text/javascript'   
    }); 
    return false; 
}); 
+0

它仍然不起作用。我的alert()電話應該啓動嗎? – yerassyl 2015-03-19 09:30:11