Rails 4中不执行Ajax响应

Ajax response is not executed in Rails 4

本文关键字:Ajax 响应 执行 Rails      更新时间:2023-09-26

我在Rails应用程序中使用ajax。在我的应用程序js中,我有

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

所以我发送ajax请求到请求控制器动作自动填充。

自动填充方法:

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

alert("hello");
$('#request_mobile").val('hi there');	
(警报仅用于测试)我想做的是用autofill.js.erb文件中的一些值更新#request_mobile-id字段。问题是我的autofill.js.erb代码没有被执行。这是火球中显示的反应:

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

但什么也没发生,甚至警报也没有启动。我不知道我做错了什么?

我不认为我完全理解这里出了什么问题,但我可以找到一些方法来更深入地理解这个问题。首先,我相信您使用$.get而不是$.ajax会更好。只是设置起来不那么复杂。

第二件事——在设置中实际上不需要contentType参数,因为它与返回数据的类型无关,而是与您在请求中发送的数据的类型有关。响应数据类型设置在dataType参数中。

第三件事,即使dataType设置为script,我也不确定它会被执行,所以如果你100%确信自己的安全,最好的方法是手动执行。

最后,以下是应该起作用的方法。

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

问题出在客户端。当它接收到Ajax响应时,它不会将其作为javascript执行。它正在将其作为文本执行。

添加return false;ajax 之后

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