javascript - 使用 AJAX 调用在 PHP 文件之间发送 POST 参数

标签 javascript php ajax

我有一个 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 代码中 echoing 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/

相关文章:

javascript - 使用纯 JavaScript 解析 JSON

Javascript - 使用 "data-id"获取对象的属性并在元素上打印

javascript - 获取复选框值,包括空格后的值

php - 是否可以连接到两个不同的mysql数据库?

javascript - 如何在javascript中声明php数组变量并在数据表上查看

php - 每月租金发票和付款数据库架构

php - 从 PHP 返回两个 2 json 对象

javascript - 如何选择 kendoDropDownList 的长度

javascript - diji.Tree + JsonRestStore - 使用 tree.set ("path"以编程方式选择节点

html - 如何更改自动添加的输入和文本区域的名称属性?