0

我正在尝试使用 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>
4

3 回答 3

1

这里有几件事出了问题。

一方面, $(".generate")lick(function(){ ... } 在 DOM 中定义“.generate”对象之前执行。这部分应该包装在一个$(document).ready( )块中,以便仅在 DOM 中存在按钮 后才注册单击操作。

然后是让 AJAX 正确触发的问题。另一个答案有解决方案;一起删除dataType所有。中的括号data: (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>
于 2013-11-10T21:52:19.157 回答
0

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

至: data: {gender:gender},

和:

<?php

$userAnswer = $_GET['gender']; 

echo $userAnswer;

?>
于 2013-11-10T21:34:31.680 回答
0

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

 $(".generate").click(function(){

  $.ajax({
     url: 'santa.php', //This is the current doc
     type: "GET",
     data: "gender="+gender, 
     success: function(data){
         console.log(data);
     }
});     
于 2013-11-10T21:45:47.977 回答