Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript js.erb是如何工作的_Javascript_Ruby On Rails_Ruby_Asp.net Ajax_Erb - Fatal编程技术网

Javascript js.erb是如何工作的

Javascript js.erb是如何工作的,javascript,ruby-on-rails,ruby,asp.net-ajax,erb,Javascript,Ruby On Rails,Ruby,Asp.net Ajax,Erb,最近我遇到了一些正在使用js.erb的应用程序,我真的不知道如何使用它……下面是代码。有人能帮我理解这是怎么回事吗 在routes.rb文件中 map.resources :player_emails 在创建操作中,我的控制器player\u emails\u controller.rb def create @player_email = PlayerEmail.create(params[:player_email]) if @player_email.save @response

最近我遇到了一些正在使用
js.erb
的应用程序,我真的不知道如何使用它……下面是代码。有人能帮我理解这是怎么回事吗

routes.rb
文件中

map.resources :player_emails
在创建操作中,我的控制器
player\u emails\u controller.rb

def create
 @player_email = PlayerEmail.create(params[:player_email])
 if @player_email.save
  @response_txt = "The player has been emailed."
  PlayerEmailsMailer.deliver_pattern_email(@something, @player_email, request.host_with_port)
  @error = false
 else
  @error = true
  @response_txt = "Please make sure you entered your name and a valid email address."
 end
end
然后我有了文件
player\u emails/create.js.erb

$('#player_email_ind').hide();
$('#player_email_submit').show();
$('#player_response_msg').html("<%= escape_javascript @response_txt %>").fadeIn();
<% unless @error %>
$('#player_email_form')[0].reset();
<% end %>
$('#player_email_ind').hide();
$(“#玩家#电子邮件#提交”).show();
$('#player_response_msg').html(“”.fadeIn();
$('#玩家\电子邮件\表单')[0]。重置();

我知道jquery正在进行什么,但我不知道这是如何进行
ajax
调用的。当出现
js.erb
时,它是否会自动执行
ajax
调用……有人能解释一下它的工作方式吗?为什么我不需要在控制器操作中做出响应,告诉它这是
格式。js

你的表单提交按钮上有
:remote=>true
吗?如果是这样,在
rails.js
application.js
中可能会有一些JavaScript通过AJAX自动提交。底线是,必须有一些JavaScript在某处发出AJAX调用并请求js或JSON响应,否则它将是一个html请求

至于你为什么不需要一个
respond\u to
块,我不完全确定。也许因为调用总是由AJAX进行的,并且有一个可用的js.erb模板,所以它可以毫无怨言地完成它的工作。是否有html.erb模板?如果没有,请尝试执行常规表单提交,并查看是否有投诉。

如果发出js(ajax)请求,它将通过呈现js.erb文件来响应,反之亦然

这是正在执行的默认行为:

  respond_to do |format|
    format.js{
      render :template => 'create.js.erb'
    }
    format.html{
      render :template => 'create.html.erb'
    }
  end

提交表单时,它会向
/player\u电子邮件
发送帖子。
routes.rb
中的资源声明确保请求由
PlayerEmailsController#create
处理

控制器负责处理接收到的每种格式。在AJAX调用的情况下,格式为“js”,通过将格式字符串显式添加到URL的末尾(
/player\u emails.js
)或(更可能)通过从请求头推断格式来设置


在您的例子中,
create
操作不需要AJAX以外的任何东西,因此它采用了一个快捷方式,并省略了
respond\u to
format
块。控制器已经计算出格式是“js”,所以当
创建
完成时,它会执行默认操作,为格式呈现适当的模板(
创建.js.erb
)。

我只是好奇是否有编写.js.erb的教程。。。