我正在尝试将变量发送到进行AJAX调用的同一页面。
仅当我分开PHP脚本时(例如process.php,相应地更改AJAX url),我才能收到成功的结果。
process.php
url
index.php <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script> $(function() { $('form').submit(function(e) { e.preventDefault(); $.ajax({ type : 'POST', url : 'index.php', data : $(this).serialize(), dataType : 'json', encode : true }) .done(function(data) { $('#result').html(data); }) }); }); </script> </head> <body> <?php $data = array(); if(isset($_POST['name'])) { $data = 'You entered: ' . $_POST['name']; echo json_encode($data); } ?> <form> <input type="text" name="name"> <input type="submit" value="Submit"> </form> <div id="result"></div> </body>
同一页是否可以捕获和处理我们使用AJAX传递的变量?
您dataType : json在AJAX设置中进行了设置,因此您应该echo使用json对象而不是String(HTML)。 使用 exit() 代替echo,然后将PHP放在页面的顶部。因此,在检查是否$_POST['name']存在HTML之前,不会回显任何HTML 。
dataType : json
echo
exit()
$_POST['name']
另一件事是,您$data = array()将在该行上转换为字符串:
$data = array()
$data = 'You entered:' . $_POST['name'];
它应该是 $data[] = ...
$data[] = ...
<?php $data = array(); if(isset($_POST['name'])) { $data[] = 'You entered:' . $_POST['name']; exit(json_encode($data)); } ?> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script> $(function() { $('form').submit(function(e) { e.preventDefault(); $.ajax({ type : 'POST', url : 'index.php', data : $(this).serialize(), dataType : 'json', encode : true }) .done(function(data) { $('#result').html(data); }) }); }); </script> </head> <body> <form> <input type="text" name="name"> <input type="submit" value="Submit"> </form> <div id="result"></div> </body>