Php JQuery AJAX post工作流
编辑 忘记了几个重要的要点Php JQuery AJAX post工作流,php,jquery,ajax,forms,Php,Jquery,Ajax,Forms,编辑 忘记了几个重要的要点 我这样做是为了避免页面刷新,从而跳回页面顶部 ajax函数的success函数将回退一个完整的新div id=“comments”,用错误消息替换现有的div id=“comments”,或者用下面的所有其他注释替换新的div id=“comments” 结束编辑 我一直在尝试包装这个jqueryajax函数,但没有成功。我在一个页面上有X个帖子,每个帖子下都有一个插入评论的表单。我想我已经非常接近了,并且已经尝试过使用firebug调试它,但老实说,我不知道我在fi
再次感谢,在firebug中,单击console,然后单击all。当您单击按钮触发ajax调用时,您应该会看到弹出一行,可能带有一个加载图标,显示正在发送的post请求。您应该能够单击选项卡,查看发布的数据、给出的响应以及响应状态代码
在您的编辑中,您说success函数将发送一个新的div id=“comments”来替换现有的div id=“comments”,但正如您现在所写的,我相信它只会在现有的div id=“comments”中添加一个div id=“comments”。但是,我不知道这是否会导致您的问题。我将一般结构放到了一个JSFIDLE中,当我提交表单时,我确实收到了一篇关于不存在的
http://fiddle.jshell.net/cori/JsLWq/show/includes/comment.php
由于相对的ajax url,所以据我所知,这不是问题所在。我认为问题在于,您混合了变量命名规则
开始时,将变量命名为普通的旧javascript对象
var form = $(this);
var div_add_comment = form.parent();
var div_comments = div_add_comment.parent();
但是,在成功处理程序中,您切换到相当常见的$x
约定,该约定通常用于指示变量是jQuery实例:
$div_comments.html(msg);
但是,此时没有变量$div_comments
;只有div\u注释
。如果您在中提交表单,它有一个ajax错误处理程序,并查看firebug控制台,您将看到由于$div_comments
未定义,因此出现了一个ReferenceError
编辑
结合kgarrigan的建议,如果在php中循环要创建的表单,并使用索引跟踪您的位置,则可以使用索引重命名表单,因此表单php/html代码如下所示:
<form id="formAddComment-' . $index . '" action="dashboard.php" enctype="multipart/form-data" method="post">
这样,每个表单都有自己的提交处理程序。如果在同一页面上有多个表单,且具有相同的id,则会导致问题。特别是#formAddComment id,它附加到submit()调用。如果有多个这样的ID,这将不起作用jquery使用选择器。当您写入$(某物)时,某物是选择器。它可以是id、类名、变量和html元素。所以不是
$("#formAddComment").submit( function(e) {
你可以用
$(".someclassName").submit( function(e) {
就像css一样,使用#表示id。上课。只需确保使用相同的名称将class属性添加到表单中即可。你也可以试试
$("form").submit(function(e) {
它应该选择任何表单元素。我认为您的函数的其余部分应该可以很好地处理此更改,因为您使用的是'this'和parent(),而不是任何直接引用。好的,dashboard.php是我的表单操作,我可以从表单中删除该操作吗?再次感谢,但我非常确定我现在没有收到ajax帖子,因为firebug显示了我发送到dashboard.php的帖子,但我希望它发送到外部脚本comment.php。是的,我认为你必须删除/更改你的动作属性Ok,去掉表单动作方法enctype属性,firebug中仍然没有任何内容,所以现在我们知道它在jquery脚本中,有什么想法吗?好的。从你发布的代码来看,我真的不知道为什么它不起作用。我的猜测是,您的函数实际上并没有使用preventDefault停止submit事件,因为它显示了一个到dashboard.php的帖子,而不是您的ajax url,并且在删除该操作后什么都没有。老实说,我总是在表单提交和链接等方面遇到问题。我通常选择按钮元素而不是提交输入。如果您需要一个非javascript选项,您可以有一个按钮和一个submit,并相应地显示相应的按钮。对不起,这就是我现在所知道的,你在顶部代码块中的“html”实际上是php和html的混合体。这不是什么大不了的事,但有点让人困惑——给出一个表单的实际生成html可能会更有用。谢谢,伙计,我在firebug中运行了你的fiddle,看到了当发出ajax请求时它应该是什么样子,但在测试时我什么都没有得到。这可能是因为页面上有多个表单实例吗?我在测试表单的第三个实例,然后我想出了一个好主意,在页面上的表单的第一个实例上测试它,并发出了ajax请求。因此,正如您可能猜到的,来自所有表单实例的所有数据都已发布。如何在jquery中仅发布所选表单中的数据?另一种选择是不使用
,而是使用
,并附加单击()
处理程序,而不是提交()
处理程序是的,#FormadComment id有多个实例,但必须有一种方法来实现这一点,使用某种.parent().find()选择,还是我疯了?我以前用链接做过类似的事情,向上滑动和滑动div以显示和折叠注释。你是从
$('[id^="formAddComment"]').submit( function(e) {
// do your ajax
});
$("#formAddComment").submit( function(e) {
$(".someclassName").submit( function(e) {
$("form").submit(function(e) {