在Rails 4中不执行Ajax响应

时间:2015-03-19 08:49:38

标签: javascript jquery ruby-on-rails ajax

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



$('#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代码没有被执行。 以下是firebag中显示的响应:



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




但没有任何反应,甚至警报也没有启动。我不知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

我不认为我完全理解这里出了什么问题,但我可以看到一些方法来更接近理解问题。 首先,我相信您最好使用$.get代替$.ajax。设置起来有点复杂。

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

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

最后,这应该是什么。

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

答案 1 :(得分:0)

问题出在您的客户端。当它收到Ajax响应时,它不会以javascript的形式执行它。它正在以文本形式执行它。

添加返回false;在ajax之后

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