2015-04-08 2 views
0

Я пытаюсь создать новый реестр данных с помощью Ajax, а затем вернуть его на ту же страницу, что созданный в формате JSON в рельсах 4.возвращения JSON ответ с рельсов

Это мой взгляд

<script> 
    $(document).ready(function() { 
     $("#comments_form").bind('ajax:success', function(data) { 
      alert($.parseJSON(data)); 
     }); 

     $("#comments_form").bind('ajax:error', function(xhr, status, error) { 
      alert(error); 
     }); 
    }); 
</script> 

<%= form_for([@article, @article.comments.build], remote:'true', format: :json, html: {id: :'comments_form'}) do |f| %> 
    # form inputs go here 
    <p> 
     <%= f.submit %> 
    </p> 
<% end %> 

И это контроллер

class CommentsController < ApplicationController 

    def create 

    @article = Article.find(params[:article_id]) 
    @comment = @article.comments.create(comment_params) 

    respond_to do |format| 
     format.json { render json: @comment.as_json(only: [:commenter]) } 
    end 
    end 
end 

Все, кажется, работает нормально, новая запись создана обработчик для AJAX: успех вызывается, однако parserJson терпит неудачу с этой ошибкой:

Uncaught SyntaxError: Неожиданный токен о

Если я поставил точку останова это то, что я вижу в «данные»:

http://i.stack.imgur.com/cKRHU.png

, что я делаю неправильно?

Благодаря

ответ

0
  • All handlers bound to jQuery events are always passed the event object as the first argument. Extra parameters denotes the parameters passed after the event argument. E.g. if the Extra parameters are listed as [xhr, settings], then to access them, you would define your handler with function(event, xhr, settings){}. See this article for a more in-depth explanation.

Reference

Таким образом, вы должны изменить свой обработчик успеха следующим образом

$("#comments_form").bind('ajax:success', function(event, data) { 
    console.log(data); 
}); 

Вы могли бы сделать то же самое для обработчика ошибок, проходя event как первый параметр, за которым следуют другие, как в вашем коде. Примечание, что вам не нужно звонить parseJSON, поскольку данные уже являются объектом JSON.

Смежные вопросы