非AJAX jQuery POST请求


77

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

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

        }
    );
});

该功能应该转到具有辅助值的comment.php页面。它发布得很好,但不能重定向到comment.php


@Doug Neiner澄清:

  1. 我有15个链接(图片)。我单击一个链接,它加载了我的JavaScript。该脚本知道imgnum我打开了什么。这个imgnum我想在的comments.php。我必须使用此JavaScript,并且没有其他方法可以解决问题。JavaScript是强制性的

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

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


2
嗯 重定向?也许您可以解释一下您要做什么。
metrobalderas

comments.php是否与请求文件位于同一文件夹中?
rahul 2010年

这个SO帖子可能会帮助stackoverflow.com/questions/1149454/…–
DC

@metrobalderas:我认为这很清楚。@pulse:是的。
艾米特

Answers:


130

我知道您正在尝试做什么,但不是您想要的。

首先,除非要更改服务器上的数据,否则不要使用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']

援助价值来自数据库。所以我真的很想让jQuery工作。因为我也需要我的Javascript。
艾米特

@amit,在您发布的代码中,该aid值不是来自将其发送到AJAX请求的数据库。您没有发布整个功能吗?
Doug Neiner 2010年

@amit,那么您的问题尚不清楚。我的代码POST是将imgnum发送到comments.php文件,并同时重定向。您还想要它做什么?
Doug Neiner

@amit,我不会不同意您的来历,imgnum只是我的答案与您的代码完全相同,只是带有重定向。只需尝试$('form... .submit();与您交换呼叫,$.post看看它是否不能完全满足您的要求。
Doug Neiner 2010年

15
您应该将表单附加到DOM上,因为IE和Firefox否则将忽略提交(如果您想添加更多非隐藏字段(例如,文本输入),则在.appendTo()之前还需要一个.hide()调用。避免在任何内容跳跃)
的Gabor纳吉

52
$("#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();
});

5
这应该合并为可接受的答案。没有DOM中的表单,它将无法在Firefox和其他浏览器中提交。
JadedCore

10

尽管道格·尼纳(Doug Neiner)的解决方案不仅是正确的,而且也是最全面的解释,但它存在一个大问题:它似乎只能在Chrome上运行。

我试了一下,试图确定一种解决方法,然后偶然发现了nopnop77的第二个答案。唯一的区别是额外的代码appendTo($(document.body))。然后,我在Firefox中对其进行了测试,它的工作原理就像一个魅力。显然,Firefox和IE需要在DOM主体中的某个位置附加临时表格。

我必须为Symfony2项目执行此实现,因为.twig模板内的路径生成器仅适用于GET参数,并且弄乱查询字符串会破坏应用程序的安全性。(顺便说一句,如果有人知道让.twig模板调用带有POST参数的页面的方法,请在评论中让我知道。)


2
这必须是评论,而不是答案,它仅提供更多信息和说明,不是提供的新答案。
Leandro '18年

4

我认为您要问的是进入“ comments.php”并发布aidimgnum。唯一的方法是使用表单提交此值。

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

必要的html(放在页面上的任意位置):

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

必要的js:

$("#see_comments").click(function(){
    $('#see_comments_aid').val(imgnum);
    $('#see_comments_form').submit();
);

这将重定向到“ comments.php”并发送适当的值imgnum(我假设您从其他地方获得)。


0

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

  1. 要转到评论页面,您可以仅使用“ anchor”标记-来代替使用JQuery post <a href="comments.php?aid=1">Show Comments</a>
  2. 或者,如果您想使用JQuery,则可以使用以下代码片段: $(location).attr("href", "comments.php?aid=1");

-1

没有完全解决问题。但确实设法解决了这个问题。我必须对JS进行很多修改才能使它起作用,但是通过执行以下操作解决了该问题的核心问题:

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

就像@Doug Neiner最初建议我那样,将辅助值添加到URL。非常感谢道格的所有努力。我真的很感激。+1并接受您所做的努力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.