发送AJAX请求时,PHP无法读取$ _GET参数

时间:2018-08-27 17:28:58

标签: php ajax

几个月以来,我一直在为此苦苦挣扎,终于到了需要在我的项目中修复它的地步。

问题是,我正在向一个php文件发送ajax请求,我需要在其中读取当前的$ _GET ['user_id']值以插入查询。但是php不会从当前URL地址读取$ _GET ['user_id']值,就像它不存在一样。

这让我发疯,因为我不知道遵循用户帐户的任何其他方法都可以达到预期的结果。

这是一段代码,仅用于解释目的:

// PHP

<?php
require_once "db.php";

$query = "INSERT INTO followers(follower, following) ";
$query .= "VALUE('{$_SESSION['id_user']}','{$_GET['user_id']}' )";
$result = mysqli_query($connect_db, $query);

?>

// AJAX

<script>
    $('.js-follow_user_btn').click(function(){
            follow_unfollow_action();
        });


        function follow_unfollow_action(){

            $.ajax({
                type: 'POST',
                url: 'follow_user.php',
                success: function(data) {
                    alert('done');
                }
            });

        }
</script>

6 个答案:

答案 0 :(得分:2)

首先,正如人们已经指出的那样,您需要将方法从GET更改为POST

第二,您需要在URL中实际指定user_id参数。使用urlencode函数对参数进行编码:

<script>
    $('.js-follow_user_btn').click(function(){
            follow_unfollow_action();
        });


        function follow_unfollow_action(){

            $.ajax({
                type: 'GET',
                url: 'follow_user.php?user_id='.urlencode($user_id),
                success: function(data) {
                    alert('done');
                }
            });

        }
</script>

请记住urldecode脚本中的follow_user.php参数。

答案 1 :(得分:2)

您正试图从php文件访问$_GET url参数,该文件不是直接从浏览器运行的。

为了让您在php ajax调用中使用该值,您需要使用此方法来获取该值

$.ajax({
    type: 'POST',
    url: 'follow_user.php',
    data: { user_id: user_id },
    success: function(data) {
        alert('done');
    }
});


//follow user
<?php
require_once "db.php";

$query = "INSERT INTO followers(follower, following) ";
$query .= "VALUE('{$_SESSION['id_user']}','{$_POST['user_id']}' )";
$result = mysqli_query($connect_db, $query);

?>

答案 2 :(得分:1)

PHP $_GET超全局变量使用来自所请求URL的查询字符串的数据填充(与用于发出请求的HTTP方法无关)。

这是您使用的URL:

url: 'follow_user.php',

上面根本没有查询字符串。

可能您希望它从托管JavaScript的页面复制查询字符串。并非如此,您需要显式提供数据。


一点点:

您正在将数据插入数据库。您应该为此使用一个POST请求,但是您应该在请求正文中传递数据(否则,您很可能会意外地创建对GET请求做出不正确响应的内容。

所以首先要做的是:更改PHP以使用$_POST代替$_GET

在编辑时,您的PHP容易受到SQL injection attacks的攻击。您需要学习如何从他们那里defend您的代码。


好,所以接下来您需要从当前页面的查询字符串中获取数据。

您可以使用JavaScript进行阅读。 This answer解释了几种方法。

一旦有了数据,就可以将其放入请求中

var user_id = (new URL(url_string)).searchParams.get("user_id");
// See the answer linked above to see how this works and for compatibility with old browsers

$.ajax({
    type: 'POST',
    url: 'follow_user.php',
    data: { user_id: user_id },
    success: function(data) {
        alert('done');
    }
});

…记住,这将其放入请求正文中,因此您需要使用$_POST而不是$_GET来读取它。

答案 3 :(得分:0)

只需在代码中通过GET更改POST +在数据或URL中传递变量即可。

 $.ajax({
    type: 'GET',
    url: 'follow_user.php',
    data: { user_id: "XXXXXX"}
    success: function(data) {
        alert('done');
    }
 });

或者更好!让POST进入您的JS代码,并使用$ _POST +获取数据

答案 4 :(得分:-1)

在ajax请求中,您使用的是POST方法类型,该方法类型将在php的$ _POST超全局变量中接收。如果要通过get获取它,请将其更改为GET方法类型,但是由于要将信息发送到数据库,因此我相信您最好坚持使用POST。

用网络语来表达,POST是“保存”数据,而GET是获得资源。

干杯!

答案 5 :(得分:-1)

由于ajax调用中有type: 'POST',,因此将其设为type: 'GET',或默认删除该行,因此该调用属于GET方法