0

ajaxに問題があります

このリクエストGEThttp://localhost:3000/projects/new (304 Not Modified) は機能し、レスポンスから JavaScript を実行します。

$('#add-project-button').hide();
$('#project-form').append("<form accept-charset=\"UTF-8\" action=\"/projects\" class=\"new_project\" data-remote=\"true\" id=\"new_project\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"&#x2713;\" /><input name=\"authenticity_token\" type=\"hidden\" value=\"gzu9DETiVV8N+OtRnkdYpD6aa0/RbM7i2H+nkQ0yXGc=\" /><\/div>\n  <div class=\"field\">\n    <label for=\"project_name\">Name<\/label><br />\n    <input id=\"project_name\" name=\"project[name]\" size=\"30\" type=\"text\" />\n  <\/div>\n  <div class=\"actions\"><input name=\"commit\" type=\"submit\" value=\"Create Project\" /><\/div>\n<\/form>");

しかし、別のリクエストPOSThttp://localhost:3000/projects (200 OK) は問題ないように見えますが、応答は空で、JavaScript は実行されていませんが、サーバーの応答は問題ありません。

Rendered tasks/_task.html.erb (0.0ms)
  Rendered projects/_project.html.erb (4.5ms)
  Rendered shared/_create.js.erb (5.4ms)
  Rendered projects/create.js.erb (6.1ms)
Completed 200 OK in 96ms (Views: 8.6ms | ActiveRecord: 84.9ms)

したがって、この場合、ブラウザがサーバーからjavascriptを実行することは想定されていないと思います。

何が問題になる可能性がありますか? ブラウザにjavascriptを受け取って実行させるには? ありがとう。

更新: ajax リクエストを作成しているフォーム:

<%= form_for(@project, :remote => true) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="actions"><%= f.submit %></div>
<% end %>

コントローラーのアクション:

def create
  @project = current_user.projects.build(params[:project])
  respond_with(@project.tap(&:save))
end

おそらく問題は、部分的なレイアウトprojects/create.js.erbを使用することによって引き起こされている可能性があります。

<% render :layout => '/shared/create', locals: { obj: @project } do %>
  $('#project-container').append("<%= escape_javascript render(@project) %>");
  $('#add-project-button').show('fast');
  $('#project-form').hide('fast', function(){ $('#project-form').empty(); });
<% end %>
4

1 に答える 1

1

問題は非常に単純でした。erbに<%=サインを入れるのを忘れたので、次のようになります。

<%= render :layout => '/shared/create', locals: { obj: @project } do %>
  $('#project-container').append("<%= escape_javascript render(@project) %>");
  $('#add-project-button').show('fast');
  $('#project-form').hide('fast', function(){ $('#project-form').empty(); });
<% end %>
于 2012-08-08T02:10:41.160 に答える