将 AJAX 传递给 PHP 时遇到问题,而是未定义

Trouble passing AJAX to PHP, gets undefined instead

本文关键字:问题 未定义 遇到 AJAX PHP      更新时间:2023-09-26

我正在尝试使用 AJAX 在脚本中传递变量,以便我可以在我的 PHP 文档中使用它。
这个想法是传递使用javascript选择的值,然后将该值传递给SQL查询。

下面我尝试使用 AJAX 传递变量性别,但它打印出未定义的何时应该打印出男性

任何帮助都会被赞赏,谢谢

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
 var gender = 'male';
 $(".generate").click(function(){
  $.ajax({
     url: 'santa.php', //This is the current doc
     type: "GET",
     data: ({gender:gender}),
     success: function(data){
         console.log(data);
     }
});     
});
</script>
</head>
<body>
<button class="generate">Generate</button>
<?php
$userAnswer = $_GET['gender']; 
echo $userAnswer;
?>
</body>
</html>

这里有几点问题。

首先, $(".generate")lick(function(){ ... } 是在DOM中定义".generate"对象之前执行的。 此部分应包装在 $(document).ready( ) 块中,以便仅在按钮存在于 DOM 中后注册单击操作。

然后是让 AJAX 正确触发的问题。 另一个答案有解决方案;一起取出dataTypedata: (gender: gender})中的括号是不必要的,但无害。

最后,设计考虑。 您使用相同的脚本来回答 JSON 响应,因此当页面首次加载时,您将生成一个 PHP 通知,指出$_GET['gender']未定义(根据您的配置,可能会消除此错误,但我得到类似 Undefined index:gender in...然后,当 AJAX 响应通过时,它是一个完整的网页,其中包含原始文档中的所有 Javascript 和 HTML。

您可能希望根据是否定义$_GET['gender']来更改完整响应,而不是这样做。

我已经发布了一个工作版本,因为我不得不自己破解这些东西。 希望对您有所帮助!

<?php
if( array_key_exists( 'gender', $_GET ) ){ 
    $userAnswer = $_GET['gender']; 
    echo $userAnswer;
    exit;
}
?><!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
 var gender = 'male';
$(document).ready( function() {
 $(".generate").click(function(){
  $.ajax({
     url: document.location, //This is the current doc
     type: "GET",
     // dataType:'json', // add json datatype to get json
     data: ({gender:gender}),
     success: function(data){
         console.log(data);
     }
  });     
 });
});
</script>
</head>
 <body>
    <button class="generate">Generate</button>
 </body>
</html>

替换: dataType:'json', // add json datatype to get json data: ({gender:gender}),

自: data: {gender:gender},

和:

<?php
$userAnswer = $_GET['gender']; 
echo $userAnswer;
?>

我会按如下方式进行 aJax 调用

 $(".generate").click(function(){
  $.ajax({
     url: 'santa.php', //This is the current doc
     type: "GET",
     data: "gender="+gender, 
     success: function(data){
         console.log(data);
     }
});