Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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
重定向上的控制器和jquery问题_Jquery_Ruby On Rails 3 - Fatal编程技术网

重定向上的控制器和jquery问题

重定向上的控制器和jquery问题,jquery,ruby-on-rails-3,Jquery,Ruby On Rails 3,我有一个coming\u soon\u controller,它显示一个表单供用户订阅电子邮件列表。它会将一个电子邮件地址传递给: def create @subscriber = Subscriber.new(params[:subscriber]) @email = params[:subscriber][:email] @ip = request.ip respond_to do |format| if @subscriber.sa

我有一个
coming\u soon\u controller
,它显示一个表单供用户订阅电子邮件列表。它会将一个电子邮件地址传递给:

  def create
    @subscriber = Subscriber.new(params[:subscriber])
    @email = params[:subscriber][:email]
    @ip = request.ip

      respond_to do |format|
        if @subscriber.save
          ComingSoonMailer.thanks_email(@email).deliver
          format.js 
          format.html {redirect_to comingsoon_path(:success => 'hooray'), :notice => "Got it. Thanks! (and remember, you can unsubscribe at any time)"}
        else
          format.html {redirect_to comingsoon_path, :alert => "Shucks. There was a problem. Mind trying again?"}
        end
      end
  end
当按钮被单击时,我有一些jquery,它去掉了按钮并显示加载的gif:

<script>
 $(function() {
    $( ".subscriberSubmit" ).click(function () {
        $(this).fadeOut();
        $('.loadingImage').fadeIn();
    });
});
</script>
我遇到的问题是当保存失败时——比如它没有通过模型中的验证。下面是发生的情况:

Started POST "/subscribers" for 127.0.0.1 at 2011-07-16 13:36:07 -0400
13:36:07 web.1     |   Processing by SubscribersController#create as JS
13:36:07 web.1     |   Parameters: {"utf8"=>"✓", "authenticity_token"=>"S99c2kgEnc9w6x61oJNL5399snImRJoVgAxXZTf8umsDg=", "subscriber"=>{"email"=>""}, "commit"=>""}
13:36:07 web.1     | Redirected to http://localhost:5000/comingsoon
13:36:07 web.1     | Completed 302 Found in 7ms
它说它可以正确重定向,但flash永远不会显示,加载的gif仍然存在。。。基本上,虽然rails做了重定向,但应用程序似乎挂起了。我认为控制器中的重定向,因为它只是HTML,实际上会重新加载页面并重置所有内容——但显然我错了。无论如何,我可以解决这个问题,所以它重定向并正确显示闪光灯

澄清
在这种情况下——我希望它重定向到/comingsoon,而不是呈现JS。根据日志,它似乎正在重定向,但浏览器没有重新加载页面,因此表单没有被重置。

现在我理解了你的问题,我可以更轻松地回答它

它不会因为您的请求类型而刷新。当您设置
:remote=>true
时,它将向服务器发送js请求。一旦服务器处理完您的请求,它就会发回信息,其中一部分信息就是mimeType。然后在控制器中,处理从服务器返回的信息。这就是你的代码

 respond_to do |format|
    if @subscriber.save
      ComingSoonMailer.thanks_email(@email).deliver
      format.js 
      format.html {redirect_to comingsoon_path(:success => 'hooray'), :notice => "Got it. Thanks! (and remember, you can unsubscribe at any time)"}
    else
      format.html {redirect_to comingsoon_path, :alert => "Shucks. There was a problem. Mind trying again?"}
    end
  end
在本例中,您的格式将始终是js,因为您总是希望从服务器返回js类型,这意味着您需要正确地呈现它,否则您的控制器将执行一些默认操作(在本例中,这是一个异步重定向,返回到您的comingsoon)

这意味着在
else
子句中还需要有
format.js
。一个好的计划就是根据您的记录是否正确保存,呈现两个不同的部分。在您的
else
子句中,您可以呈现一个js,该js删除您的
表单
并呈现一个新表单,并显示相应的消息,告诉用户它失败了。你也可以试着

else
    format.js {redirect_to comingsoon_path, :alert => "Shucks. There was a problem. Mind trying again?"}
end
虽然我不知道你的控制器会怎么处理

查看Rails3中关于UJS的精彩文章


祝你好运。

在我发布的示例中,我故意试图推送失败。控制器的
else
部分中没有JS,那么为什么它会尝试渲染为JS呢?因为表单是
remote=>true
?顺便说一句,它说的是
| Rendered subscribers/create.js.erb(0.3ms)
当操作成功时,它只是在日志的不同部分,在电子邮件发送后。对于a-1来说似乎没有必要,因为问题一开始就不清楚,我根据给出的答案给出了一个有教育意义的答案。
else
    format.js {redirect_to comingsoon_path, :alert => "Shucks. There was a problem. Mind trying again?"}
end