I am making an ajax call from js to call a method (assocboxchange) in my controller (AssociatesController), using XMLHttpRequest. I know the XMLHttpRequest works fine because I use it in other places with success. My problem is my URL I am using for this request doesn;t access the method in my controller which I (think) I am specifying. I am having it post to /channels/assocboxchange/" with certain parameters, but the method in my controller never is gotten to. I know the problem is not in my js or in making the post request -- it is posting somewhere and I believe that because in firefox, the error concole is clean. Can someone tell me from my js below where I am posting, or why my controller method isnt getting the post? Thanks, Janna B //this function is getting called by an onchange in the associates select function assocchange(therow){ var s = document.getElementById("assoc"+therow).value; var url = "/channels/assocboxchange/" var parameters = "assoc=" + escape(encodeURI(s)) + "&id=" + therow; formid="assoc" + therow; makePOSTRequest(url, parameters, formid) } function makePOSTRequest(url, parameters, formid){ req3 = new XMLHttpRequest(); if (req3) { req3.onreadystatechange = alertContents(formid); req3.open(''POST'', url, true); req3.setRequestHeader("Content-type", "application/x-www-form- urlencoded"); req3.setRequestHeader("Content-length", parameters.length); req3.setRequestHeader("Connection", "close"); req3.send(parameters); } } function alertContents(formid) { if (req3.readyState == 4) { if (req3.status == 200) { result = req3.responseText; document.getElementById("''"+formid+"''").innerHTML result; } else { alert(''There was a problem with the request.''); } } }
On Fri, 2009-07-24 at 05:09 -0700, JannaB wrote:> it is posting somewhere and I believe that because in firefox, > the error concole is clean.The console tab in the Firebug plugin is what you want to be looking at. It will tell you if / where your app is making requests and the parameters it''s passing. HTH, Bill> Can someone tell me from my js below where I am > posting, or why my controller method isnt getting the post? Thanks, > Janna B > > //this function is getting called by an onchange in the associates > select > function assocchange(therow){ > var s = document.getElementById("assoc"+therow).value; > var url = "/channels/assocboxchange/" > var parameters = "assoc=" + escape(encodeURI(s)) + "&id=" + therow; > formid="assoc" + therow; > makePOSTRequest(url, parameters, formid) > } > > function makePOSTRequest(url, parameters, formid){ > req3 = new XMLHttpRequest(); > if (req3) { > req3.onreadystatechange = alertContents(formid); > req3.open(''POST'', url, true); > req3.setRequestHeader("Content-type", "application/x-www-form- > urlencoded"); > req3.setRequestHeader("Content-length", parameters.length); > req3.setRequestHeader("Connection", "close"); > req3.send(parameters); > } > } > > > function alertContents(formid) { > if (req3.readyState == 4) { > if (req3.status == 200) { > result = req3.responseText; > document.getElementById("''"+formid+"''").innerHTML > result; > } else { > alert(''There was a problem with the request.''); > } > } > }
What shows up in the log when you try this action? That will give you more info... --Matt Jones On Jul 24, 8:09 am, JannaB <mistressja...-PkbjNfxxIARBDgjK7y7TUQ@public.gmane.org> wrote:> I am making an ajax call from js to call a method (assocboxchange) in > my controller (AssociatesController), using XMLHttpRequest. I know > the XMLHttpRequest works fine because I use it in other places with > success. My problem is my URL I am using for this request doesn;t > access the method in my controller which I (think) I am specifying. I > am having it post to /channels/assocboxchange/" with certain > parameters, but the method in my controller never is gotten to. I know > the problem is not in my js or in making the post request -- it is > posting somewhere and I believe that because in firefox, the error > concole is clean. Can someone tell me from my js below where I am > posting, or why my controller method isnt getting the post? Thanks, > Janna B > > //this function is getting called by an onchange in the associates > select > function assocchange(therow){ > var s = document.getElementById("assoc"+therow).value; > var url = "/channels/assocboxchange/" > var parameters = "assoc=" + escape(encodeURI(s)) + "&id=" + therow; > formid="assoc" + therow; > makePOSTRequest(url, parameters, formid) > } > > function makePOSTRequest(url, parameters, formid){ > req3 = new XMLHttpRequest(); > if (req3) { > req3.onreadystatechange = alertContents(formid); > req3.open(''POST'', url, true); > req3.setRequestHeader("Content-type", "application/x-www-form- > urlencoded"); > req3.setRequestHeader("Content-length", parameters.length); > req3.setRequestHeader("Connection", "close"); > req3.send(parameters); > } > } > > function alertContents(formid) { > if (req3.readyState == 4) { > if (req3.status == 200) { > result = req3.responseText; > document.getElementById("''"+formid+"''").innerHTML > result; > } else { > alert(''There was a problem with the request.''); > } > } > }
What a great tool. When I click the select box, in firebug, I see a RED: POST http://localhost:3000/channels/assocboxchange/ with a littel red circle with a white X in it. IF I look at the parameters, those seem to be passed properly. In my ChannelsController, I have: def assocboxchange puts "you;re in" render :action => ''display'' end Which doesn;t get hit -- obviously, that red POST line is trying to tell me something is wrong...but what? -Janna B
Oh, wait, I need to pass the parameter of the authenticity_token to the url. How can I do this?
Oh, wait, I need to pass the parameter of the authenticity_token to the url. How can I do this? -Janna On Jul 24, 10:18 am, bill walton <bwalton...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Fri, 2009-07-24 at 05:09 -0700, JannaB wrote: > > it is posting somewhere and I believe that because in firefox, > > the error concole is clean. > > The console tab in the Firebug plugin is what you want to be looking at. > It will tell you if / where your app is making requests and the > parameters it''s passing. > > HTH, > Bill > > > Can someone tell me from my js below where I am > > posting, or why my controller method isnt getting the post? Thanks, > > Janna B > > > //this function is getting called by an onchange in the associates > > select > > function assocchange(therow){ > > var s = document.getElementById("assoc"+therow).value; > > var url = "/channels/assocboxchange/" > > var parameters = "assoc=" + escape(encodeURI(s)) + "&id=" + therow; > > formid="assoc" + therow; > > makePOSTRequest(url, parameters, formid) > > } > > > function makePOSTRequest(url, parameters, formid){ > > req3 = new XMLHttpRequest(); > > if (req3) { > > req3.onreadystatechange = alertContents(formid); > > req3.open(''POST'', url, true); > > req3.setRequestHeader("Content-type", "application/x-www-form- > > urlencoded"); > > req3.setRequestHeader("Content-length", parameters.length); > > req3.setRequestHeader("Connection", "close"); > > req3.send(parameters); > > } > > } > > > function alertContents(formid) { > > if (req3.readyState == 4) { > > if (req3.status == 200) { > > result = req3.responseText; > > document.getElementById("''"+formid+"''").innerHTML > > result; > > } else { > > alert(''There was a problem with the request.''); > > } > > } > > }
You''ll need to grab the token on the server side - see line 1065 of prototype_helper.rb for more detail. But before you do that, you may want to take a look at the rest of PrototypeHelper; what you''re doing looks to be well-covered by the methods already available, which could save you a lot of low-level AJAX hackery. --Matt Jones On Jul 27, 6:41 am, JannaB <mistressja...-PkbjNfxxIARBDgjK7y7TUQ@public.gmane.org> wrote:> Oh, wait, I need to pass the parameter of the authenticity_token to > the url. How can I do this? -Janna > > On Jul 24, 10:18 am, bill walton <bwalton...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > On Fri, 2009-07-24 at 05:09 -0700, JannaB wrote: > > > it is posting somewhere and I believe that because in firefox, > > > the error concole is clean. > > > The console tab in the Firebug plugin is what you want to be looking at. > > It will tell you if / where your app is making requests and the > > parameters it''s passing. > > > HTH, > > Bill > > > > Can someone tell me from my js below where I am > > > posting, or why my controller method isnt getting the post? Thanks, > > > Janna B > > > > //this function is getting called by an onchange in the associates > > > select > > > function assocchange(therow){ > > > var s = document.getElementById("assoc"+therow).value; > > > var url = "/channels/assocboxchange/" > > > var parameters = "assoc=" + escape(encodeURI(s)) + "&id=" + therow; > > > formid="assoc" + therow; > > > makePOSTRequest(url, parameters, formid) > > > } > > > > function makePOSTRequest(url, parameters, formid){ > > > req3 = new XMLHttpRequest(); > > > if (req3) { > > > req3.onreadystatechange = alertContents(formid); > > > req3.open(''POST'', url, true); > > > req3.setRequestHeader("Content-type", "application/x-www-form- > > > urlencoded"); > > > req3.setRequestHeader("Content-length", parameters.length); > > > req3.setRequestHeader("Connection", "close"); > > > req3.send(parameters); > > > } > > > } > > > > function alertContents(formid) { > > > if (req3.readyState == 4) { > > > if (req3.status == 200) { > > > result = req3.responseText; > > > document.getElementById("''"+formid+"''").innerHTML > > > result; > > > } else { > > > alert(''There was a problem with the request.''); > > > } > > > } > > > }