I am trying to use the jQuery POST function but it is handling the request in AJAX style. I mean it\'s not actually going to the page I am telling it to go.
While the solution by Doug Neiner is not only correct but also the most comprehensively explained one, it has one big problem: it seems to only work at Chrome.
I fidgeted around for a while trying to determine a workaround, and then stumbled upon the second answer by nopnop77. The only difference is the extra code appendTo($(document.body))
. Then I tested it in firefox and it worked like a charm. Apparently, Firefox and IE need to have the temporary form attached somewhere in the DOM Body.
I had to do this implementation for a Symfony2 project, since the path generator inside the .twig
templates would only work with GET
parameters and messing with the query string was breaking havoc with the security of the app. (BTW, if anyone knows a way to get .twig templates to call pages with POST parameters, please let me know in the comments).
Actually, $.post()
sends some data to the server. It does not cause any redirection unless you do it in your server side code which handles the POST request. I can suggest two solutions:
<a href="comments.php?aid=1">Show Comments</a>
.$(location).attr("href", "comments.php?aid=1");
i think what you're asking is to get to 'comments.php' and posting aid
with value imgnum
. The only way to do this is to submit this value with a form.
However, you can make this form hidden, and submit it on an arbitrary click somewhere with jquery.
html necessary (put anywhere on page):
<form id='see_comments_form' action='comments.php' action='POST'>
<input id='see_comments_aid' type='hidden' name='aid' value=''>
</form>
js necessary:
$("#see_comments").click(function(){
$('#see_comments_aid').val(imgnum);
$('#see_comments_form').submit();
);
this will redirect to 'comments.php' and send the proper value imgnum
(that i assume you are getting from somewhere else).
didnt exactly solve the problem. but did manage to work around it. i had to do a lot modification to the JS to make this work, but the core problem of this question was solved by doing this:
$("#see_comments").attr({href: "comments.php?aid='"+imgnum+"'"});
this appended the aid value to the URL as @Doug Neiner initially suggested me to do. Thanks a lot Doug for all the effort. I really appreciate. +1 and accept to your answer for the effort.
$("#see_comments").click(function () {
$('<form action="comments.php" method="POST"/>')
.append($('<input type="hidden" name="aid">').val(imgnum))
.appendTo($(document.body)) //it has to be added somewhere into the <body>
.submit();
});
I know what you are trying to do, but its not what you want.
First, unless you are changing data on the server, don't use a POST
request. Just have #see_comments
be a normal <a href='/comments.php?aid=1'>...
If you have to use POST
, then do this to get the page to follow your call:
$("#see_comments").click(function() {
$('<form action="comments.php" method="POST">' +
'<input type="hidden" name="aid" value="' + imgnum + '">' +
'</form>').submit();
});
How this would actually work.
First $.post
is only an AJAX method and cannot be used to do a traditional form
submit like you are describing. So, to be able to post a value and navigate to the new page, we need to simulate a form
post.
So the flow is as follows:
imgnum
#see_comments
form
with the imgnum
value in it as a hidden fieldcomments.php
pagecomments.php
page will have access to the posted variable (i.e. in PHP it would be $_POST['aid']
)