[英]JQuery Ajax $_GET request received an incorrect response from PHP
出了点问题:
我通过 ajax 请求向 php 发送数据。 它在那里检查收到了一个空的或非空的 GET,并且对于这些选项中的每一个,它都会返回不同的答案。 问题是在 php 页面上,答案是正确的,但是当它返回到发送它的页面时,它变得不正确。
当 GET 为空时,php 返回“空”(如预期),但 ajax 打印“非空”(预期为“空”)
我完全不明白为什么会这样。 我尝试通过退出和返回返回各种
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');
}
不幸的是,这与问题无关。 我完全摆脱了“缓存”,但情况并没有改变。 我什至尝试只检查一个 $ _GET 参数作为empty()
(也尝试isset()
)。
结果和以前一样:在 rate.php 中答案是正确的(取决于请求是空的还是带参数的),并且在带有表单的页面上总是只有一个答案:“空”。 而且,更奇怪的是,如果你返回 $_GET 数组,那么它会正确返回(当 $_GET 不为空时,它返回“空”而不是空数组)
if (!empty($_GET['rating'])){
print_r($_GET);
exit('not empty');
} else {
print_r($_GET);
exit("empty");
}
页面上的控制台答案返回“空”而不是空数组
Array
(
[rate] => rating=1
)
empty
当您使用cache: false
时, $_GET
永远不会为空。 这通过向查询字符串添加一个额外的_=(timestamp)
参数来工作,这样 URL 将始终不同,以防止它被缓存(这称为“cachebuster”)。 因此, $_GET['_']
将始终被设置。
您应该在检查之前删除该元素。
unset($_GET['_']); // remove cachebuster
if (empty($_GET)) {
echo "empty";
} else {
echo "not empty";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.