javascript - 解析 Rails 中的 JSON 问题

标签 javascript ruby-on-rails json coffeescript

所以我对此非常困惑。我有这个 CoffeeScript :

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"}

这是我接收此参数的 Controller :

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

我不太确定问题是什么,但我只需要解决一些错误,我已经尝试了几个小时来解决这个问题,但尚未找到解决方案。

最佳答案

如果你尝试一下怎么样:

    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);
                }
            });
    });
});

关于javascript - 解析 Rails 中的 JSON 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33182938/

相关文章:

javascript - 如何通过 Assets 管道从 Javascript 中的子文件夹提供图像

javascript - JSON.Parse 正在复制 ID 字段

java - 当我尝试将 json 数据发布到 Web 服务时,Android 应用程序崩溃

Javascript图形布局算法

javascript - 无法生成 0 到 10 之间的随机数

javascript - 用于渲染元素的 jquery 事件

ruby-on-rails - 输入中的 Rails 5 和超赞字体图标

Javascript 抛出 : Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src ' self'

ruby-on-rails - 验证是否存在送货地址,除非它与账单地址相同

Python JSON 编码