2013-10-23 29 views
1

以下JavaScript將帶有參數recipe_numXMLHttpRequest發送到我的Rails服務器,如何從控制器提取數據?我試過params[:recipe_num]session[:recipe_num],兩者都不起作用。如何在Rails控制器中從XMLHttpRequest中提取數據

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

回答

0

對於Rails的5.1.2,

您可以通過request.raw_post得到的原始數據。 如果你想使用它作爲params,你應該添加Content-type標題。

# 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 } 
    } 
    } 
相關問題