【问题标题】:Easiest Way To Make A Form Submit Without Refresh无需刷新即可提交表单的最简单方法
【发布时间】:2010-09-08 10:49:32
【问题描述】:

我一直在尝试创建一个简单的计算器。使用 PHP,我设法从 POST 的输入字段和跳转菜单中获取值,但当然表单会在提交时刷新。

使用我尝试使用的 Javascript

function changeText(){
document.getElementById('result').innerHTML = '<?php echo "$result";?>'

但这会在单击按钮后继续给出“0”的答案,因为它无法从 POST 获取值,因为表单尚未提交。

所以我正在尝试通过 ajax 或类似方法找出最简单的方法

或使用 JavaScript 获取跳转菜单上的选定值。

我在网上阅读了一些 ajax 示例,但它们很混乱(不熟悉语言)

【问题讨论】:

  • 阅读我的帖子,然后看看 jQuery,它非常适合初学者

标签: php javascript ajax forms webforms


【解决方案1】:

使用jQuery + JSON 组合来提交类似这样的表单:

test.php:

<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="jsFile.js"></script>

<form action='_test.php' method='post' class='ajaxform'>
 <input type='text' name='txt' value='Test Text'>
 <input type='submit' value='submit'>
</form>

<div id='testDiv'>Result comes here..</div>

_test.php:

<?php
      $arr = array( 'testDiv' => $_POST['txt'] );
      echo json_encode( $arr );
?>

jsFile.js

jQuery(document).ready(function(){

    jQuery('.ajaxform').submit( function() {

        $.ajax({
            url     : $(this).attr('action'),
            type    : $(this).attr('method'),
            dataType: 'json',
            data    : $(this).serialize(),
            success : function( data ) {
                        for(var id in data) {
                            jQuery('#' + id).html( data[id] );
                        }
                      }
        });

        return false;
    });

});

【讨论】:

  • 使用这个和下面的插件我想我现在已经解决了,谢谢大家!
【解决方案2】:

最好的方法是使用 Ajax 和 jQuery

在你的脑海中包含你的 jQuery 库之后,使用类似下面的东西

$('#someForm').submit(function(){
   var form = $(this);

   var serialized = form.serialize();

   $.post('ajax/register.php',{payload:serialized},function(response){
       //response is the result from the server.
       if(response)
       {
           //Place the response after the form and remove the form.
           form.after(response).remove();
       }
   });
   //Return false to prevent the page from changing.
   return false;
});

你的 php 应该是这样的。

<?php
    if($_POST)
    {
       /*
           Process data...
       */


       if($registration_ok)
       {
           echo '<div class="success">Thankyou</a>';
           die();
       }
    }
?>

【讨论】:

  • +1,很好的解释。如果您想要更懒惰的方法,jQuery form plugin 很好。它甚至可以处理传统 Ajax 无法处理的文件上传。
  • 不同意该插件,将帮助他继续前进。
  • 这个插件很棒,很实用
  • 我真的很喜欢这段代码,但我不知道如何从帖子中获取数据。 alert(serialized) 给了我“user=john”,但在 php 文件中 'echo $_POST("user");` 什么也没给我。
【解决方案3】:

我使用一个新窗口。在保存时,我会打开一个处理保存并关闭 onload 的新窗口。

window.open('save.php?value=' + document.editor.edit1.value, 'Saving...','status,width=200,height=200');

php 文件将包含一个带有 onload="window.close();" 的 bodytag在此之前,保存我的编辑器内容的 PHP 脚本。

它可能不是很安全,但正如您所要求的那样简单。编辑器可以保留其撤消信息等。

【讨论】:

  • 如果用户阻止了弹出窗口,你就完蛋了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 2011-01-11
  • 1970-01-01
相关资源
最近更新 更多