我有一个 PHP 文件 test.php,它有一个简单的链接,单击后调用 AJAX 函数将数据作为 POST 参数发送到另一个文件 testPHP.php。第二个文件然后从 AJAX 调用接收 POST 参数,然后提醒 $_POST 数组中的内容。我面临的问题是,在第二个文件中,$_POST 数组为空(我使用 print_r($_POST) 检查过),所以我认为数据没有通过。 这些是 2 个文件:
测试.php
<a id="link" role="button" href="testPHP.php">Test</a>
<script type="text/javascript">
$("#link").click(function(e) {
e.preventDefault();
alert('function entered');
$.ajax({
url: "testPHP.php",
type: "POST",
data: {
parameter1: 'test',
parameter2: 'test2'},
success: function(msg) {
alert('wow' + msg);
}
});
alert('function end');
document.getElementById('#link').setAttribute('href','testPHP.php');
});
testPHP.php
if(isset($_GET))
{
echo "<script>alert('GET is there');</script>";
print_r($_GET);
}
if(isset($_POST))
{
echo "<script>alert('POST is there')</script>";
print_r($_POST);
}
if(isset($_POST['parameter1']))
{
echo "<script>alert('$_POST is set')</script>";
header('Location: HomePage.php');
}
else
{
echo "<script>alert('No post variable set')</script>";
}
到目前为止,我尝试过的是,如果 AJAX 调用已成功执行,则发送一条 SUCCESS 消息,它会提醒我成功消息。我还检查了第二个文件中 $_POST 数组的内容,看看我是否以 POST 请求以外的格式接收数据(比如可能必须分解才能获取内容的字符串),但是$_POST 数组为空。 这是我重定向到第二页时得到的输出: 数组() 数组() $_POST 和 $_GET(用于测试目的)数组为空。
我也阅读了 AJAX 文档,但无法使这种简单的 POST 数据传输起作用。有人可以帮我解决这个问题,这样我就可以了解如何正确发送 POST 参数并将数据接收到 $_POST['parameter1'] 和 $_POST['parameter2'] 字符串中,以便我可以进一步处理数据。
注意:我使用了使用隐藏表单元素的 FORM 的 POST 方法并且工作正常,但我想尝试这种方法以更好地理解 AJAX 的工作原理。
最佳答案
上面的版本略有不同,应该可以帮助您解决问题。为了便于调试,它全部是一页,但是单击按钮后您可以清楚地看到正在运行的脚本。简单地在 php 代码中 echo
ing javascript 并希望它会执行客户端是行不通的 - 简单地回显消息或 JSON 对象会更好。
<?php
if( $_SERVER['REQUEST_METHOD']=='POST' ){
ob_clean();
print_r( $_POST );
exit();
}
?>
<!doctype html>
<html>
<head>
<title>jQuery - ajax experiments</title>
<script src='//code.jquery.com/jquery-latest.js'></script>
</head>
<body>
<a id='link' role='button' href='#'>Test</a>
<script>
$('#link').click(function(e) {
e.preventDefault();
alert('function entered');
$.ajax({
url: location.href,
type: 'POST',
data: {
parameter1: 'test',
parameter2: 'test2'
},
success: function(msg) {
alert( 'wow' + msg );
}
});
alert('function end');
});
</script>
</body>
</html>
作为 2 个单独的页面(都在同一目录中,否则将页面编辑到 ajax 目标)
<!doctype html>
<html>
<head>
<title>jQuery - ajax experiments</title>
<script src='//code.jquery.com/jquery-latest.js'></script>
</head>
<body>
<a id='link' role='button' href='#'>Test</a>
<br /><br />
<script>
$('#link').click(function(e) {
e.preventDefault();
$.ajax({
url: 'jquery-ajax-target.php',
type: 'POST',
data: {
parameter1: 'test',
parameter2: 'test2'
},
success: function(msg) {
alert( 'wow' + msg );
}
});
});
</script>
</body>
</html>
和 ajax 目标,jquery-ajax-target.php
<?php
if( $_SERVER['REQUEST_METHOD']=='POST' ){
ob_clean();
$parameter1=( isset( $_POST['parameter1'] ) ) ? $_POST['parameter1'] : false;
$parameter2=( isset( $_POST['parameter2'] ) ) ? $_POST['parameter2'] : false;
$_POST['modified']=array(
'p1'=>sprintf('modified %s', strrev( $parameter1 ) ),
'p2'=>sprintf('modified %s', strrev( $parameter2 ) )
);
$json=json_encode( $_POST );
echo $json;
exit();
}
?>
关于javascript - 使用 AJAX 调用在 PHP 文件之间发送 POST 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54265214/