0

使用 Rails 3.2.8

选择链接会产生预期的确认对话,“哦,是吗?”。

选择“确定”按钮的预期结果是文本“表单在此处”<div id = "target">应更改为“表单\nsnookum”。

实际结果是文本“表格到这里”消失了,但没有放置任何内容<div id = "target"></div>

显示 HTML5 doctype、rails 包含的 jQuery 文件和 AJAX 链接的页面代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title></title>
    <script src="/assets/jquery.js?body=1" type="text/javascript"></script>
    <script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
    <script src="/assets/application.js?body=1" type="text/javascript"></script>
    <meta content="authenticity_token" name="csrf-param" />
    <meta content="0ycwNRsr8kneUjB5/SFz+LD+bnhbQHXMJzgADbkv78g=" name="csrf-token" />
  </head>
  <body>
    <a href="/sessions/new" data-confirm="oh yeah?" data-remote="true">Hello world!</a>
      <div id="target">
        the form goes here
      </div>
  </body>
</html>

会话控制器,

respond_with(@session)将导致变量@session传递到 app/views/sessions/new.js.erb

respond_to :html, :js
  def new
    @session = "snookums"
    respond_with(@session)
  end

模板:app/views/sessions/new.js.erb

var session_form = $('<%= j(render(:partial => "form")) -%>');
$('#target').html(session_form);

表单:app/views/sessions/_form.html.erb

使用 Firebug 检查元素

GET http://localhost/sessions/new Response

var session_form = $('the form\nsnookums');
$('#target').html(session_form);

开发日志

Started GET "/sessions/new" for 127.0.0.1 at 2012-11-10 15:57:20 -0500
Processing by SessionsController#new as JS
the form "snookums"
  Rendered sessions/_form.html.erb (1.2ms)
  Rendered sessions/new.js.erb (48.9ms)
Completed 200 OK in 65ms (Views: 64.0ms | ActiveRecord: 0.0ms)

一切似乎都是相互关联的。问题是我在 new.js.erb 中生成的响应有问题吗?是否$('#target').html(session_form);相当于“将div‘target’的内容替换为‘session_form’中包含的文本?

顺便说一句,FWIW 我也在没有确认的情况下尝试过 - 没有区别。

4

1 回答 1

0

对于 ajax 相关的问题,使用错误处理程序查看返回的内容是一个好习惯。为此,我在所有使用 ajax 的页面中包含此代码块;

$.ajaxSetup({
  error:function(x,e){
       if(x.status==0){
       alert('You are offline!!\n Please Check Your Network.');
       }else if(x.status==404){
       alert('Requested URL not found.');
       }else if(x.status==500){
       alert('Internal Server Error.');
       }else if(e=='parsererror'){
       alert('Error.\nParsing JSON Request failed.');
       }else if(e=='timeout'){
       alert('Request Time out.');
       }else {
       alert('Unknow Error.\n'+x.responseText);
       }
  }
  });
于 2012-11-11T00:05:28.067 回答