【问题标题】:POST payload data to database using XMLHttpRequest rails使用 XMLHttpRequest rails 将有效负载数据发布到数据库
【发布时间】:2018-04-05 16:25:35
【问题描述】:

我正在开发基于GOjs library 的锦标赛括号,该括号有分数输入。

一旦我的用户完成了对括号的编辑,我将括号保存到 JSON 变量中:

function save() {
    var tojs = myDiagram.model.toJSON();
    var payload = JSON.parse(tojs);
    stringify_tojs = JSON.stringify(payload);
    myDiagram.isModified = false;

我使用 XMLHttpRequest 将有效负载发布到处理“有效负载”的 Rails 模型中:

var request = new XMLHttpRequest();
    request.onload = callback;
    request.open("post", "http://localhost:3000/malesingles");
    request.setRequestHeader("Content-Type", "application/json");
    request.send(payload);

我不知道我哪里出错了,但我确定它就在我身边 控制器参数,但我找不到我的错误已经一个星期了, 控制器看起来像这样:

@tournoi = Tournoi.new(bracket_params)
  if @tournoi.save
    redirect_to root_url
    flash[:success] = "Your tournament bracket has been validated!"
  #  redirect_to @tournoi
  else
    render 'new'
  end

结束

我已将括号参数包含在私人设置中

def bracket_params
      params.require(:tournoi).permit(:payload)
     end

尝试了不同的方法来发布有效负载,但都没有真正起作用,希望能得到一些帮助以了解我出错的地方,我得到一个参数丢失或为空:/。

【问题讨论】:

  • 尝试要求在文件顶部的控制器中撬动,在创建模型 Tournoi 的新实例之前,在控制器中添加 binding.pry 并运行您的操作,bracket_params 中的内容点?
  • 也许JSON.parse(params)
  • @DavidDacruz tournoi 使用`bracket_params params.require(:tournoi).permit(:payload)`
  • @FabrizioBertoglio 我在使用 JSON.parse(params[:payload]) 时得到一个(没有将 nil 隐式转换为字符串)
  • @DezzH 尝试参数[:tournoi][:payload]

标签: ruby-on-rails postgresql xmlhttprequest ruby-on-rails-5 gojs


【解决方案1】:

@DezzH 从我的 repo https://github.com/fabriziobertoglio1987/sprachspiel/tree/feature/purchase-system 中查看我的最新提交我刚刚使用 coffescript 构建了类似的东西。提交包括我的工作描述

基本上我想出来的是,post 请求不传递 url 中的参数,所以在请求中不容易找到它们,但你可以在你的网络选项卡中检查

你可以从我正在传递的图像中看到

 createPurchase: -> 
    $.ajax
       url: "/products"
       method: "POST"
       dataType: "json"
       data: { items: {product_id: '1', name: 'test' }}
       error: (jqXHR, textStatus, errorThrown) ->
         console.log "AJAX Error: #{textStatus}"
       success: (data, textStatus, jqXHR) ->
         console.log "Successful AJAX call: #{data}"
         console.log data

然后我在控制器中设置了一个 binding.pry,我可以在那里看到我的参数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2014-11-30
    • 2016-06-04
    • 2016-04-23
    • 2012-07-11
    • 2021-07-09
    相关资源
    最近更新 更多