【问题标题】:How to extract data from XMLHttpRequest in Rails controller如何从 Rails 控制器中的 XMLHttpRequest 中提取数据
【发布时间】:2013-10-23 06:51:10
【问题描述】:

以下 JavaScript 将带有参数 recipe_numXMLHttpRequest 发送到我的 rails 服务器,如何从控制器中提取数据?我试过params[:recipe_num]session[:recipe_num],都不行。

function getRules(recipe_num){
    var request = new XMLHttpRequest;
    request.open("POST", "/path/rules_json?format=json", true);
    var token = $("meta[name='csrf-token']").attr("content");
    request.setRequestHeader("X-CSRF-Token", token);
    request.onreadystatechange = function() {
        if(request.readyState == request.DONE){
            buildForm(JSON.parse(request.responseText));
        }
    };
    request.send("recipe_num=" + recipe_num);
};

【问题讨论】:

    标签: javascript ruby-on-rails ajax xmlhttprequest


    【解决方案1】:

    对于 Rails 5.1.2,

    您可以通过request.raw_post获取原始数据。 如果你想使用它作为params,你应该添加Content-type header。

    # for string
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    request.send("prev_id="+pid+"&next_id="+nid);
    # for json string
    request.setRequestHeader("Content-type", "application/json");
    request.send(JSON.stringify({ prev_id: pid }));
    

    参考文件action_dispatch/http/parameters.rb

    DEFAULT_PARSERS = {
        Mime[:json].symbol => -> (raw_post) {
          data = ActiveSupport::JSON.decode(raw_post)
          data.is_a?(Hash) ? data : { _json: data }
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多