11155
(-- --)
February 29, 2016, 3:18am
1
I'm new in Rails.
I'm trying to add a form with ajax.It's just typing a text and submit to
file 'ex/act' and show the param in form.
My code:
<script>
function loadDoc(url, cfunc) {
var xhttp;
xhttp=new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
cfunc(xhttp);
}
};
xhttp.open("POST", url, true);
xhttp.send();
}
function myFunction(xhttp) {
document.getElementById("demo").innerHTML = xhttp.responseText;
}
</script>
And the form:
<%= form_for :ex,url:ex_act_path,remote:true do |f|%>
<%= f.text_field :text%>
<button onclick="loadDoc('ex/act',myFunction)">abc</button>
<%end%>
In the 'ex/act' controller:
def act
@a = get_param
end
private
def get_param
params.require(:ex).permit(:text)
end
In the Console of browser:
POST http://localhost:3000/ex/act 422 Unprocessable Entity
GET http://localhost:3000/ex/act 200 OK
I'm new in Rails.
I'm trying to add a form with ajax.It's just typing a text and submit to
file 'ex/act' and show the param in form.
My code:
<script>
function loadDoc(url, cfunc) {
var xhttp;
xhttp=new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
cfunc(xhttp);
}
};
xhttp.open("POST", url, true);
xhttp.send();
}
function myFunction(xhttp) {
document.getElementById("demo").innerHTML = xhttp.responseText;
}
</script>
And the form:
<%= form_for :ex,url:ex_act_path,remote:true do |f|%>
<%= f.text_field :text%>
<button onclick="loadDoc('ex/act',myFunction)">abc</button>
<%end%>
In the 'ex/act' controller:
def act
@a = get_param
end
private
def get_param
params.require(:ex).permit(:text)
end
In the Console of browser:
POST http://localhost:3000/ex/act 422 Unprocessable Entity
GET http://localhost:3000/ex/act 200 OK
Rails has full support for Ajax form submission baked in. Have you tried just adding remote: true to your form_for declaration, and see what happens? Watch in the console as you submit the form, see how the correct controller handles the request. If you write a JS view (name it the same as the controller method that is invoked by your form, so create.js.erb or update.js.erb, whichever is appropriate) then you will have access to your updated model object, and you can use it to re-paint the page with updated data. Here's a very nice write-up on this approach: :remote => true in Rails Forms
Walter