【问题标题】:Send data from form and show received in another div with jQuery ajax使用 jQuery ajax 从表单发送数据并显示在另一个 div 中接收到的数据
【发布时间】:2017-11-03 18:10:19
【问题描述】:

我有一个小测试 php 页面,我想将带有收音机和复选框的表单提交到 process.php,然后结果将被发送回并显示在同一页面的#content_result 中,而无需刷新页面。我尝试使用 jQuery Ajax,但是当我点击提交时没有发生任何事情。

当我在 process.php 中更改一些东西时问题解决了 :)

这是我的 index.php 代码:

<!Doctype HTML>
<html>
<head>
    <title>Test</title>
    <meta charset="utf-8"/>
    <script src="js/jquery-3.2.1.min.js"></script>
</head>

<body>
       	<form action="xuly.php" method="get" id="fil_form">
            <input type="radio" name="type" value="numberic" id="type_num"/><label>Numberic Type</label><br>
            <input type="radio" name="type" value="character" id="type_char"/><label>Character Type</label><br>
            <input type="checkbox" name="zerotonine" value="zero" id="check_zero"/><label>From 0 to 9</label><br>
            <input type="checkbox" name="evennumberic" value="even" id="check_even"/><label>Even Number</label><br>
            <input type="checkbox" name="oddnumberic" value="odd" id="check_odd	"/><label>Odd Number</label><br>
            <input type="submit" name="submit_btn" id="submit_btn" value="Submit" />
        </form>
     <div id="content_result" style="margin-left:5px; width: 990px; min-height: 600px; border:1px solid #000; float:left;">
     </div>
     <script type="text/javascript">
   		$(document).ready(function(){
			var formsubmit = $("#submit_btn");	
		  	formsubmit.click(function(event){
			  	event.preventDefault();
				var data = $('form#fil_form').serialize();
				$.ajax({
					  type : 'GET', 
					  url : 'process.php', 
					  data : data, 
					  success : function(data)  
								{ 
								   $('#content_result').html(data); 
								}
					  });
				});
		});
</script>    
</body>
</html>

这是我的 process.php 代码:

<?php
		if($_GET['type']=='numberic'){
			if(isset($_GET['zerotonine']) && ($_GET['zerotonine'])=='zero'){
				echo '0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9';
			}elseif(isset($_GET['evennumberic'])&&($_GET['evennumberic'])=='even'){
				echo '0 - 2 - 4 - 6 - 8';
			}elseif(isset($_GET['oddnumberic']) && ($_GET['oddnumberic'])=='odd'){
				echo '1 - 3 - 5 - 7 - 9';
			}
			else{
				echo '0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9<br>';
				echo '0 - 2 - 4 - 6 - 8<br>';
				echo '1 - 3 - 5 - 7 - 9<br>';
			}
		}elseif($_GET['type']=='charactic'){
			if(isset($_GET['zerotonine']) && ($_GET['zerotonine'])=='zero'){
				echo 'Zero - One - Two - ... - Eight - Nine';
			}elseif(isset($_GET['evennumberic'])&&($_GET['evennumberic'])=='even'){
				echo 'Zero - Two - Four - Six - Eight';
			}elseif(isset($_GET['oddnumberic']) && ($_GET['oddnumberic'])=='odd'){
				echo 'One - Three - Five - Seven - Nine';
			}
			else{
				echo 'Zero - One - Two - ... - Eight - Nine<br>';
				echo 'Zero - Two - Four - Six - Eight<br>';
				echo 'One - Three - Five - Seven - Nine<br>';
			}
		}
?>

这是我点击提交按钮时得到的网络调试:

【问题讨论】:

  • 好的,我试试。谢谢你:)
  • 我试过了,没有任何改变......
  • $_GET['submit_btn'] 永远不会存在。 $_POST 更糟糕。通过输入print_r($_GET);开始调试
  • 验证js/jquery-3.2.1.min.js 确实存在于网络目录中,因为它与index.php 文件相关。并在浏览器中打开开发者工具。单击提交按钮时检查控制台和网络选项卡。
  • 您也可以使用 bower 网络“调试器”(Ctrl + Shift + i)然后 [Network] 选项卡。单击您的 [提交] 按钮。检查最后一行的 [Params] 和 [Responses]。

标签: php jquery html ajax fixed


【解决方案1】:

您的 PHP 代码是正确的。

问题在于 JavaScript 代码,当您提交表单时,$('form#fil_form').serialize() 没有包含提交按钮以及其他输入值。

在您的代码中,您要做的第一件事是检查 submit_btn isset($_GET['submit_btn']),但 submit_btn 不包含在数组中!

解决方案可能是以下之一,

  1. 测试 GET 是否为空,而不是测试 $_GET['submit_btn']

  1. 通过更改此代码将 submit_btn 输入添加到 GET 数组:

    var data = $('form#fil_form').serialize();

    收件人:

    var data = $('#fil_form').serializeArray();

    data.push({ name: 'submit_btn', value: 'submit_btn' });

【讨论】:

    【解决方案2】:

    通过添加print_r($_GET);进行调试

    <?php
    	// if(isset($_GET['submit_btn'])){ // remove this !!!
    		if($_GET['type']=='numberic'){
    			if(isset($_GET['zerotonine'])){
    				echo '0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9';
    			}elseif(isset($_GET['evennumberic'])){
    				echo '0 - 2 - 4 - 6 - 8';
    			}elseif(isset($_GET['oddnumberic'])){
    				echo '1 - 3 - 5 - 7 - 9';
    			}
    			else{
    				echo '0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9<br>';
    				echo '0 - 2 - 4 - 6 - 8<br>';
    				echo '1 - 3 - 5 - 7 - 9<br>';
    			}
    		}elseif($_GET['type']=='charactic'){
    			if(isset($_GET['zerotonine'])){
    				echo 'Zero - One - Two - ... - Eight - Nine';
    			}elseif(isset($_GET['evennumberic'])){
    				echo 'Zero - Two - Four - Six - Eight';
    			}elseif(isset($_GET['oddnumberic'])){
    				echo 'One - Three - Five - Seven - Nine';
    			}
    			else{
    				echo 'Zero - One - Two - ... - Eight - Nine<br>';
    				echo 'Zero - Two - Four - Six - Eight<br>';
    				echo 'One - Three - Five - Seven - Nine<br>';
    			}
    		}
    //	} // end of the if to remove 
        print_r($_GET); // TODO: remove when above cases are working
    ?>

    【讨论】:

    • 这是我在提交 "Array ( [type] => numberic )" 后收到的声明
    • 这是 PHP 端的 $_GET 数组。你应该能够利用它。
    • 你也可以删除不存在的if(isset($_GET['submit_btn'])){
    • 所以...不需要?
    • 不是标准...传递提交按钮本身的值听起来很奇怪。
    【解决方案3】:

    您的 JS 选择器中的表单 ID 不正确:

    改变这个:

     var data = $('form#fil_form').serialize();
    

    到这里:

     var data = $('#fil_form').serialize();
    

    这是我注意到的第一件事。如果还是不行,那就用forData()JS对象获取所有表单元素吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 2013-08-21
      • 1970-01-01
      • 2018-08-09
      • 2012-05-08
      相关资源
      最近更新 更多