使用jQuery / AJAX使用新表单/内容重新填充div

时间:2013-04-12 11:20:06

标签: javascript jquery ajax

是否有任何jQuery / AJAX函数在显示表单(或任何相关内容)时,按下按钮时,包含原始表单的div将被新表单替换?基本上,是一个多部分表单,无需重新加载页面。

我可以使用这样的东西吗?

$('form#myForm').submit(function(event) {
    event.preventDefault();
        $.ajax({
            type: '',
            url: '',
            data: $(this).serialize(),
            success: function(response) { 
                $('#divName').html(response); 
                //somehow repopulate div with a second form?
            }
        })
        return false;
 });

我之前用过这个项目来添加项目到列表中,但是我从来没有用它来完全用不同的内容重新填充它。如何将其指向第二种形式?

编辑 - 我让它工作,但只有当我写'#form2'进行替换时。我提醒了回复,我得到了{"formToShow":"show2"}。我尝试做response.formToShow,但它未定义。

<head>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>
</head>


<div id="divName">
    <form method="POST" action = "#" id="form1">
        <input type="textbox" name="textbox1" value="1"/>
        <input type="submit" name="submit1"/>
    </form>

    <form method="POST" action = "#" id="form2" style="display: none">
        <input type="textbox" name="textbox2" value="2"/>
        <input type="submit" name="submit2"/>
    </form>
</div>

<script>
 $('form#form1').submit(function(event) {
    event.preventDefault();
        $.ajax({
            type: 'JSON',
            url: 'receiving.php',
            data: $(this).serialize(),
            success: function(response) { 
                $('#form1').hide();  //hides
                //$('#form2').show();  //this will show
                $(response.formToShow).show(); //this does not display form 2
            }
        })
        return false;
    });
</script>

这是receive.php。当我查看此页面时显示{"formToShow":"show2"}

<?php
echo json_encode(array("formToShow" => "#form2"));
?>

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

这是个人偏好,但我永远不会通过响应发送HTML并将其显示出来,我要做的是:

从服务器发回JSON数组,例如{ formToShow: "#form1" }

然后你可以这样做:

success: function(response) { 
   $('form').hide();
   $(response.formToShow).show();
}

显然,使用这种方法,你还必须在你的标记中使用第二种形式:

<form method="POST" action = "#" id="form2" style="display: none">
<input type="textbox" name="textbox2"/>
<input type="submit" name="submit2"/>
</form>

你还必须改变(拾取数组):

 $.ajax({
        type: 'JSON'

答案 2 :(得分:1)

试试这个

$('form#myForm').submit(function(event) {
    event.preventDefault();
    $.ajax({
        type: '',
        url: '',
        data: $(this).serialize(),
        success: function(response) {
        $('#divName').html(response); 
        $('#form1').hide();
        $('#form2').show();
        }
    })
    return false;
 });


<form method="POST" action = "#" id="form1">
    <input type="textbox" name="textbox1"/>
    <input type="submit" name="submit1"/>
</form>

<form method="POST" action = "#" id="form2" style="dispay:none;">
    <input type="textbox" name="textbox2"/>
    <input type="submit" name="submit2"/>
</form>