【问题标题】:Parse JSON in rails issue在 Rails 问题中解析 JSON
【发布时间】:2016-01-15 22:36:32
【问题描述】:

所以我对此感到非常困惑。我有这个咖啡脚本:

jQuery ->
     $('.message').click (e) ->
            e.preventDefault()
            href = $(location).attr('href')
            vote = { 'message': 'message': $('.messagebody').val(), 'photo_id' : href.substr(href.lastIndexOf('/') + 1)}
            $.ajax '../messages/',
                type: 'POST'
                dataType: 'json'
                data: JSON.stringify(vote)
                error: (jqXHR, textStatus, errorThrown) ->
                  # console.log(jqXHR)
                  # console.log(textStatus)
                   console.log(errorThrown)

                success: (data, textStatus, jqXHR) ->
                  $('.messagebody').val('')
                  console.log(vote)

当我触发这个事件时,我的 rails 服务器会收到这个:

{"{\"message\":{\"message\":\"asdfasdfasdfasdfasdfasdfasdf\",\"photo_id\":\"1\"}
}"=>nil, "controller"=>"messages", "action"=>"create"}

这是接收此参数的我的控制器:

class MessagesController < ApplicationController
  before_filter :authenticate_user!
  def create
    @message = Message.new()

    logger.debug JSON.parse(params)
    @user = User.find_by_id(Photo.where(:id => params[:message][:photo_id]).pluck(:user_id))
    @message.photo_id = params[:message][:photo_id]
    @message.message = params[:message][:message]
    @message.user_id = @user.id
    @message.user_email = current_user.email
    @message.to_user = @user.email
    UserNotifier.send_message(@message).deliver
    respond_to do |format|
      format.json { render  json: '{"message": ok}' , status: :created}
    end
  end
end

当我尝试解析参数时出现此错误

TypeError (no implicit conversion of ActionController::Parameters into String)

我也尝试过不对数据进行字符串化,只发送 json,我的服务器可以 100% 使用它,但 javascript 返回此错误:

SyntaxError: Unexpected token o

我不太确定问题出在哪里,但我只需要解决这些错误,我已经尝试了好几个小时,但还没有找到解决方案。

【问题讨论】:

    标签: javascript ruby-on-rails json coffeescript


    【解决方案1】:

    你试试怎么样:

        jQuery ->
         $('.message').click (e) ->
                e.preventDefault()
                href = $(location).attr('href')
                vote = { 'message': $('.messagebody').val(), 'photo_id': href.substr(href.lastIndexOf('/') + 1)}
                $.ajax(
                    { 
                        url: '/messages',
                        type: 'POST',
                        dataType: 'json',
                        data: vote,
                        error: (jqXHR, textStatus, errorThrown) ->
                            console.log(errorThrown)
                        success: (data, textStatus, jqXHR) ->
                            $('.messagebody').val('')
                            console.log(vote)
                    }
                )
    

    您应该不需要序列化和反序列化参数。我注意到您的投票变量中有一个错误(消息键重复),至于您的 url /messages 应该可以正常工作

    我在我的浏览器控制台中尝试了这个纯js,​​在你的控制台中尝试这个,只需更改所需的变量

    jQuery(function(){
        $('.message').click(function(e) {
                e.preventDefault();
                href = '/photos/123';
                vote = { 
                    'message': 'text', 
                    'photo_id': href.substr(href.lastIndexOf('/') + 1) 
                };
                $.ajax({
                    url: '/foods',
                    type: 'GET',
                    dataType: 'json',
                    data: vote,
                    error: function(jqXHR, textStatus, errorThrown){
                        console.log(errorThrown);
                    },
                    success: function(data, textStatus, jqXHR){
                        $('.messagebody').val('');
                        console.log(vote);
                    }
                });
        });
    });
    

    【讨论】:

    • 我试过了,但我仍然从咖啡脚本SyntaxError: Unexpected token o 得到这个错误,我控制器中的所有代码都运行良好,但我试图在成功时做一些事情,咖啡脚本抛出一个错误我想不通。该错误与我认为的解析json有关。
    • 我已经编辑了我的答案以修复 $.ajax() 函数被调用方式中的错误
    • 同样的问题,SyntaxError: Unexpected token o at Object.parse (native). .. 我已经搜索过了,我知道问题出在哪里。对我来说,它看起来像是在尝试解析已经解析的 json?这就是为什么我之前要对其进行字符串化,以试图克服这个错误。
    • 我不明白为什么会这样。让我添加我用来测试的纯 js 示例(我实际上并没有测试咖啡)。尝试直接在浏览器的控制台中使用相同的 js,并发布在控制器中接收到的 params 哈希
    • 我继续把它放在页面本身并注释掉所有的咖啡,我得到了同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多