非AJAX jQuery POST请求

时间:2010-01-13 05:45:46

标签: javascript jquery

我正在尝试使用jQuery POST函数,但它正在以AJAX样式处理请求。我的意思是它实际上并没有进入我要告诉它的页面。

$("#see_comments").click(function() {
    $.post(
        "comments.php", 
        {aid: imgnum}, 
        function (data) {

        }
    );
});

此功能应该带有辅助值到 comments.php 页面。它发布正常但没有重定向到 comments.php


@Doug Neiner 澄清:

  1. 我有15个链接(图片)。我点击一个链接,然后加载我的JavaScript。脚本知道我打开的imgnum。我希望在 comments.php 中使用此imgnum。我必须使用这个JavaScript,没有其​​他方法可以做到这一点。 JavaScript是强制性的

  2. 您的方法成功发布辅助值。但是在 comments.php 中,当我尝试回显该值时,它什么也没显示。

  3. 我正在使用Firebug。在控制台中,它显示我在步骤(2)中成功完成的回显请求。

6 个答案:

答案 0 :(得分:128)

我知道你要做什么,但它不是你想要的。

首先,除非您更改服务器上的数据,否则请勿使用POST请求。只需将#see_comments设为正常<a href='/comments.php?aid=1'>...

即可

如果 使用POST,请执行此操作以使页面跟随您的通话:

$("#see_comments").click(function() {
  $('<form action="comments.php" method="POST">' + 
    '<input type="hidden" name="aid" value="' + imgnum + '">' +
    '</form>').submit();
});

这实际上是如何运作的。

首先$.post 一种AJAX方法,不能像你描述的那样用来做传统的form提交。因此,为了能够发布值导航到新页面,我们需要模拟form帖子。

所以流程如下:

  1. 您点击图片,您的JS代码获得imgnum
  2. 接下来,有人点击了#see_comments
  3. 我们创建一个临时form,其中imgnum值为隐藏字段
  4. 我们提交的表单会发布值加载comments.php页面
  5. 您的comments.php页面可以访问已发布的变量(即在PHP中为$_POST['aid']

答案 1 :(得分:46)

$("#see_comments").click(function () {
    $('<form action="comments.php" method="POST"/>')
        .append($('<input type="hidden" name="aid" value="' + imgnum + '">'))
        .appendTo($(document.body)) //it has to be added somewhere into the <body>
        .submit();
});

答案 2 :(得分:10)

虽然Doug Neiner的解决方案不仅是正确的,而且也是最全面解释的解决方案,但它有一个大问题:它似乎只适用于Chrome。

我坐立不安试图确定一种解决方法,然后偶然发现了nopnop77的第二个答案。唯一的区别是额外的代码appendTo($(document.body))。然后我在 firefox 中测试了它,它就像一个魅力。显然,Firefox和IE需要将临时表单附加到DOM Body中的某个位置。

我必须为Symfony2项目执行此实现,因为.twig模板中的路径生成器只能使用GET参数并且弄乱查询字符串正在破坏对安全性的破坏。应用程序。 (顺便说一句,如果有人知道如何获取.twig模板来调用带有POST参数的页面,请在评论中告诉我。)

答案 3 :(得分:4)

我认为您要问的是访问'comments.php'并发布值为aid的{​​{1}}。唯一的方法是使用表单提交此值。

但是,您可以隐藏此表单,并使用jquery在任意位置单击提交。

必要的html(放在页面的任何地方):

imgnum

必要:

<form id='see_comments_form' action='comments.php' action='POST'>
    <input id='see_comments_aid' type='hidden' name='aid' value=''>
</form>

这将重定向到'comments.php'并发送正确的值$("#see_comments").click(function(){ $('#see_comments_aid').val(imgnum); $('#see_comments_form').submit(); ); (我假设你是从其他地方获得的)。

答案 4 :(得分:0)

实际上,$.post()会向服务器发送一些数据。除非您在处理POST请求的服务器端代码中执行此操作,否则它不会导致任何重定向。我可以提出两个解决方案:

  1. 要转到评论页面,而不是使用JQuery帖子,您只需使用'锚'标记 - <a href="comments.php?aid=1">Show Comments</a>
  2. 或者,如果您想要浏览JQuery,可以使用以下代码段:$(location).attr("href", "comments.php?aid=1");

答案 5 :(得分:-1)

并没有完全解决问题。但确实设法解决它。我不得不对JS进行大量修改以使其工作,但这个问题的核心问题通过这样解决了:

    $("#see_comments").attr({href: "comments.php?aid='"+imgnum+"'"});

这将辅助值附加到URL,因为@Doug Neiner最初建议我这样做。 非常感谢道格所做的一切努力。我真的很感激。 +1并接受你的答案。