iframe与div + jquery的比较

8
我想知道对于我想要实现的目标,哪个更合适:
在我的主页(main.php)上,我有链接到不同表格的表单:form1.php、form2.php、form3.php。我需要链接的页面打开在main.php的一部分,即在一个div或iframe中,在不刷新main.php的情况下。这些表单页面可以填充、删除、更新数据库。我进行这些操作时,不想刷新main.php,只想刷新相应的表单页面。 我的第一个选择是例如在main.php的iframe中打开form1.php。当我提交表单时,只有iframe中的form1.php被刷新。 我的第二个选择是使用jquery:在main.php的div中打开链接(form1.php)。 在div中提交表单,只刷新div。
由于我没有太多ajax和jquery的经验,因此第二个选项更具挑战性。第一个选项对我来说更为直接。 我想知道使用div刷新与iframe相比的优点,例如兼容不同的浏览器等等... 谢谢。
2个回答

3
我建议使用jquery和ajax(XMLHttpRequest)。Iframes已经过时,不语义化,并且您无法访问main.php内的iframe。
$("#submit_button_id").click(function(e) {
    e.preventDefault();
    $.post('form.php', $("#form_name").serialize(), function(result) { 
        $("#div_id").html(result); } }

这段代码应该可以正常工作。
$("#submit_button_id").click(function(e) { :捕获分配的id的点击函数并创建一个触发器。

e.preventDefault(); :防止表单按常规方式提交,我们将通过jquery提交它。

$.postPOST方法发送表单。

'form.php' 是您的表单控制器,它将返回要显示的html代码。

("#form_name").serialize() 此函数是用于序列化要发送的表单的实用程序。它加载输入字段并将它们转换为类似{ field1: value, field2: value }的形式。

function(result) { 是第三个参数,在成功时,$.post调用第三个参数作为函数。我们创建了一个匿名函数来替换我们div的html。

$("#div_id").html(result) 将指定的div的html设置为result变量。

请参考http://api.jquery.com/,他们有一份精美的参考资料表。


我一直在尝试您的代码,有几个问题: 有没有办法检查表单的值是否已发布。通常,通过常规表单提交,我会通过显示值来检查项目是否已发布:例如<?php echo("email: $email"); ?>。在这里我该如何做呢? 此外,我不明白"result"是什么?你能给我一个例子吗? 我想做的其中一件事是,在表单提交后,页面form1.php将刷新,以在不可编辑的表单中显示字段值,例如:电子邮件= example@gmail.com,国家:美国等... - JMarc
有很多方法可以检查它,如果你想在服务器端检查它,可以使用$_POST['email']变量和一些正则表达式函数。或者,如果你想检查它们是否不为null,可以使用if($_POST['email'])。如果你想在客户端进行检查,这将更快,因为它会在提交之前检查字段,但是这很容易被绕过,所以始终要实现服务器端检查。 - Umur Kontacı
“result”只是从form1.php脚本生成的HTML代码。例如,if($_POST['name']) echo 'form submitted'。这段代码将生成文本“表单已提交”,并且是通过XMLHttpRequest动态刷新的result变量。 - Umur Kontacı
总之,您需要按照上述所示进行表单验证,并将结果 echo 成您想要的样子。请记住,在 php 文件中避免输出 html 标签,除非必要,只需在主 html 文件中包含它们即可。这不会造成任何损害,但通常是一种不良做法。 - Umur Kontacı
这是form1.php的代码: <?php $name = $_POST['name']; $birth = $_POST['birth']; $act = $_POST['act']; $query="INSERT INTO `dbase` (`name`,`birth`) VALUES ('$name','$birth')"; mysql_query($query); $id=mysql_insert_id(); ?><html> <body> <?php if(!empty($name)){ $html = "姓名:".$name; $html .= "出生日期:".$birth;
echo("$html"); } else{ ?> <form name="form1"> 姓名 <input type='text' name='name'> <br/> 出生地 : <input type="text" name="birth"><br/> <input type='submit' name='act' value='保存' id="submit_btn"/> </form> <?php } ?> </body> </html>
- JMarc
显示剩余7条评论

1

尝试使用jQuery的$("#div").load("form.php");

这种方法是从服务器获取数据的最简单方式。它与$.get(url, data, success)大致相当,除了它是一个方法而不是全局函数,并且它有一个隐式回调函数。当检测到成功响应时(即textStatus为“success”或“notmodified”时),.load()将匹配元素的HTML内容设置为返回的数据。

参考资料:.load() | jQuery API文档


@Umur Kontacı,您能解释一下为什么您说过:“您无法访问main.php中的iframe”吗? - Chris22
多么巧妙的方法! - ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接