使用 jQuery-AJAX 向 PHP 提交表单并在不刷新的情况下在 div 中显示新内容的问题

Posted

技术标签:

【中文标题】使用 jQuery-AJAX 向 PHP 提交表单并在不刷新的情况下在 div 中显示新内容的问题【英文标题】:Problem using jQuery-AJAX to submit form to PHP and display new content in div without refreshing 【发布时间】:2011-09-10 12:26:40 【问题描述】:

我正在尝试使用 jQuery-AJAX 将表单中的数据提交到我的控制器 (index.php),在那里它由 PHP 处理并通过 PDO 插入到数据库中(如果有效)。将代码插入数据库后,先前存在表单的 div 应替换为另一个页面 (newpage.php) 的内容。提交表单时不应刷新原始页面,仅应刷新表单先前存在的div。我的代码存在一个特殊问题,尽管我似乎无法找到问题所在:

这是我的 jQuery:

<script type="text/javascript">

    function processForm() 
    var action= $('#action').val();
    var data = $('#data').val();
    var dataString = 'action=' + action + '&data=' + data;

$.ajax (
    type: "POST",
    url: ".",
    data: dataString,
    success: function()
            $('#content_main').load('newpage.php');
        
    );

</script>

这是我的 html:(作为旁注,我注意到当我从 HTML 中取出“return false;”时,表单将提交到我的数据库,但整个页面也会重新加载 - 并且是空白的.当我在HTML中留下“return false;”时,newpage.php正确加载到div中,但数据没有进入数据库)

<form action="" method="post" onsubmit="processForm();return false;">

    <input type="hidden" name="action" value="action1" />
    <input type="text" name="data" id="data" />

    <input type="submit" value="CONTINUE TO STEP 2" name="submit" />

</form>

这是我的 PHP:

<?php
$action = $_POST['action'];

switch ($action) 
    case 'action1':
        $data = $_POST['data'];

        pdo ($data);

    exit;

?>

我觉得我在某个地方犯了一个愚蠢的错误,但我就是不能指手画脚。感谢您提供的任何帮助!

解决方案(通过 Jen):

jQuery:

<script type="text/javascript">
    function processForm() 
        var dataString = $("#yourForm").serialize();

    $.ajax (
    type: 'POST',
    url: ".",
    data: dataString,
    success: function()
            $('#content_main').load('newpage.php');
          
        );
    return false;
    );
</script>

HTML:

<form id="yourForm">

    <input type="hidden" name="action" value="action1" />
    <input type="text" id="data" name="data" />

    <input type="submit" value="CONTINUE TO STEP 2" name="submit" />

</form>

PHP:

<?php
    $action = $_POST['action'];

    switch ($action) 
        case 'action1':
            $data = $_POST['data'];

            pdo ($data);

        exit;
    
?>

我学到了什么:如果可以选择,请使用 .serialize() jQuery 方法,因为它可以节省大量时间为每个表单值写出 var 并且 .serialize() 通常不会出错发送php的信息。

【问题讨论】:

pdo function ($action); 是错字/摘要吗?因为否则,这是一个语法错误...... 是的,这是一个摘要(有错字!)。我将它从 pdo 函数($action)修改为 pdo($data)。好地方,谢谢。 【参考方案1】:

试试这个:

 $("#yourForm").submit(function()


  // Could use just this line and not vars below      
  //dataString = $("#yourForm").serialize(); 

  // vars are being set by selecting inputs by id but id not set in form fields
  var action= $('#action').val(); // value of id='action' 
  var data = $('#data').val();    // value of id='data'
  var dataString = 'action=' + action + '&data=' + data;
  // dataString = 'action=&data=' so nothing is posted to db
  // because input fields cannot be found by id
  // fix by adding id fields to form fields

   $.ajax (
   type: "POST",
   url: ".",
   data: dataString,
   success: function()
        $('#content_main').load('newpage.php');
    
   );
return false; 
);

并将表单更改为(我添加了 id 属性):

<form id="yourForm">
<input type="hidden" id="action" name="action" value="action1" />
<input type="text" id="data" name="data" id="data" />

<input type="submit" value="CONTINUE TO STEP 2" name="submit" />

</form>

【讨论】:

不客气。而且,我也学到了一些东西......我不确定网址:'。就像BeingSimple 一样。我必须记住那个。 嗯...乍一看,我可能已经过时了。数据没有保存到数据库中(我看到的初始更改是以前更新的反映)。嗯…… 我编辑了答案,以便您的 PHP 页面可以获取您的表单字段。 另外,您尝试获取表单字段值的方式有点偏离。我把这两个选项都放在我的答案中。 好的!它起作用了(这次肯定)。正如您所建议的那样,dataString 的写入方式存在问题。我所做的更改是去掉var actionvar data,只使用var datastring = $("#yourForm").serialize();。非常感谢您的帮助,珍!!!!【参考方案2】:

似乎您需要解释而不是修复代码。下面对这两种情况做一个简单的解释:

    当您取出return false; 时,代码会将您的表单视为普通的HTML 表单,将通过action="" 提交给服务器,这将导致无处可去。然而,在这种情况下,Javascript 也可以完成它的工作,但由于页面被重定向到无处,所以它在最后变成空白。

    当你输入return false;回到表单,表单将捕获事件处理程序并知道该表单将返回 FALSE 以提交。这就是为什么您可以看到您的 Javascript 代码是如何完成这项工作的。但是,您应该注意的一件事是,您的 jQuery AJAX 函数需要 POST(或 GET)处理文件,而不是 '.'

在不了解您的实际情况的情况下考虑此回复。您需要回顾一下您的代码,看看如何编辑它。如果您有任何问题,我们很乐意回复。

希望这个小提示有所帮助(:

【讨论】:

感谢您的回复,BeingSimpler。我可能在帖子中没有具体说明,但我将表单信息发送到索引文件(我的控制器),所以在取出return false; 的情况下,当我使用@987654328 时,表单被提交到索引文件@,虽然它不知道要显示什么(因此是空白页)。 '.' 也可以将POST 发送到索引文件,但不是我设置其余代码的方式。再次感谢您的回复。

以上是关于使用 jQuery-AJAX 向 PHP 提交表单并在不刷新的情况下在 div 中显示新内容的问题的主要内容,如果未能解决你的问题,请参考以下文章

通过 Jquery-Ajax 提交复选框表单 [关闭]

使用 AJAX 向 PHP Web 服务提交基本表单数据

JS-AJAX and jQuery-AJAX

Django 表单未使用 Javascript 提交

如何使 JQuery-AJAX 请求同步

php curl 模拟post表单向提交数据