【问题标题】:JQuery Ajax $_GET request received an incorrect response from PHPJQuery Ajax $_GET 请求收到来自 PHP 的错误响应
【发布时间】:2020-08-04 19:20:03
【问题描述】:

出了点问题:

我通过 ajax 请求向 php 发送数据。它在那里检查收到了一个空的或非空的 GET,并且对于每个选项它返回不同的答案。问题是在 php 页面上答案是正确的,但是当它返回到发送它的页面时它变得不正确。

当 GET 为空时,php 返回 'empty'(如预期),但 ajax 打印 'not empty'(预期为 'empty')

我完全不明白为什么会这样。我尝试使用 exit 和 return 返回各种

AJAX:

$(".rate_form .submit").click(function() {
  var rate_form = $(this).parents().find('.rate_form');
  var rate = rate_form.serialize();
  $.ajax({
    type: "GET",
    url: "rate.php",
    data: {
      "rate": rate
    },
    cache: false,
    success: function(response) {
      console.log(response);
    }
  });
  return false;
});

RATE.PHP:

header("Content-type: text/html; charset=utf-8");

if(empty($_GET)){
    exit('empty');
}elseif (!empty($_GET)){
    exit('not empty');
}


UPD:我尝试了@Barmar 的建议

很遗憾,这与问题无关。我完全摆脱了“缓存”,但情况并没有改变。我什至尝试只检查empty() 的一个 $ _GET 参数(也尝试isset())。

结果和以前一样:在rate.php中答案是正确的(取决于请求是空的还是带参数的),并且在带有表单的页面上总是只有一个答案:“空”。而且,更奇怪的是,如果你返回$_GET数组,那么它返回正确(当$_GET不为空时,它返回“空”和not empty数组)

if (!empty($_GET['rating'])){
    print_r($_GET);
    exit('not empty');
} else {
    print_r($_GET);
    exit("empty");
}

页面上的控制台答案返回“空”且非空数组

Array
(
    [rate] => rating=1
)
empty

【问题讨论】:

  • 你只是说它“不正确”。但是你期待什么,你会得到什么?
  • 我不明白你在说什么答案变得不正确。你如何检查它是正确的还是错误的?
  • 页面上是否有多个.rate_form?你正在序列化所有这些。我想你想要var rate_form = $(this).closest(".rate_form");
  • @Barmar 我只有一个 .rate_form。尝试解释一下:当GET为空时,php返回'empty',而ajax打印'not empty'。
  • cache: false 增加了一个额外的参数,所以$_GET 永远不会为空。

标签: php jquery ajax get ajaxform


【解决方案1】:

当您使用cache: false 时,$_GET 永远不会为空。这通过在查询字符串中添加一个额外的_=(timestamp) 参数来实现,这样URL 将始终不同,以防止它被缓存(这称为“cachebuster”)。因此,$_GET['_'] 将始终被设置。

您应该在检查之前删除该元素。

unset($_GET['_']); // remove cachebuster
if (empty($_GET)) {
    echo "empty";
} else {
    echo "not empty";
}

【讨论】:

  • 很遗憾,这与问题无关。我完全摆脱了“缓存”,但情况并没有改变。我什至尝试只检查empty() 的一个$ _GET 参数(也尝试isset())。 结果和之前一样:在rate.php中答案是正确的(取决于请求是空的还是带参数的),并且在有表单的页面上总是只有一个答案: “空的”。而且,更奇怪的是,如果你返回 $_GET 数组,那么它会正确返回(当 $_GET 不为空时,它返回“空”且 not empty 数组)
  • 你在检查$_GET['rating'],但是参数的名字是rate
  • data: { "rate": rate }$_GET['rate'] 的值是序列化形式。您可能应该只做data: rate,这样您就不会添加额外的包装级别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
相关资源
最近更新 更多