如何修复此未定义的索引错误?Jquery Ajax 为 PHP

How can I fix this undefined index error? Jquery Ajax to PHP

提问人:TryHarder 提问时间:11/8/2011 更新时间:11/8/2011 访问量:15737

问:

我正在使用 Jquery、Ajax 和 PHP 尝试发送一个要写入 mysql 数据库的变量。 正在发出 Ajax 请求,但 php 未拾取该变量。我不知道为什么会这样。

使用 firebug 和 console.log(),我可以看到已经对 write_results.php

如果我检查响应,它会说

注意:未定义的索引:第 2E:\write_results.php 中的 testscore

这是我的PHP

<?php 
  $testscore=$_POST['testscore'];  //get testscore from Ajax 
  include 'DB.php';
  $con = mysql_connect($host,$user,$pass);
  $dbs = mysql_select_db($databaseName, $con); 
     if (isset($_POST['testscore'])) {  
       $addClient  = "INSERT INTO variables (`id` ,`name`) VALUES (NULL,'$testscore')";  
       mysql_query($addClient) or die(mysql_error());  
       }

?>  

这是我的ajax脚本

<script type="text/javascript">
$(document).ready(function() {  
testscore ="tryagain"; //testvalue to enter into the mysql database
  $.ajax({  
    type: "POST",  
    url: "write_results.php",  
    data: testscore,      
    success: function(){  
      $('#box2').html("success");
    } 
  })
}); 
</script>

我的问题

  1. 为什么$testscore没有从 ajax 脚本接收到值?
  2. 我该如何解决这个问题?
php jquery post undefined-index

评论


答:

6赞 nickb 11/8/2011 #1

你没有告诉 JS 如何发送你的 POST 参数。将您的 JS 更改为:

data: { 'testscore':testscore },

这等同于形式。它告诉 JS 和 PHP 你希望将变量映射到键,然后你将使用它"testscore=" + testcorekey=valuetestscore"testscore"$_POST['testscore']

编辑:请参见 http://api.jquery.com/jQuery.ajax/“向服务器发送数据”

评论

0赞 TryHarder 11/8/2011
我刚刚意识到发送到 php 的信息是“tryagain”,所以你的答案很有意义。非常感谢您的回答!!
0赞 GoalieGuy6 11/8/2011 #2

尝试使用数据需要格式化为查询字符串。data: "testscore=" + testscore,

评论

1赞 nickb 11/8/2011
不一定 - 数据可以接受查询字符串或值映射。
2赞 Ghost-Man 11/8/2011 #3

在 php 代码中,您可以获得 $_POST['testscore'] 形式的$testscore值。$_POST 是一个超级全局数组,testscore 是这里的索引。这个 _POST 美元数组的索引来自您发布的表单的字段名称。在您的例子中,您正在使用 ajax 将数据传递到 php 页面。可以通过 GET 方法或 POST 方法进行传递。由于您在 ajax 代码中指定了 type:POST 来传递 POST,因此您将能够在 php 文件中使用 $_POST varibale。但是您没有在 ajax 代码中指定将保存值的数组索引。

testscore ="tryagain"; //It will only assign the value to the javascript variable

您需要提供键值对。你可以用枯萎的方式去做:

testscore="testscore=tryagain"; //In your php code, the testscore will be the array index and tryagain will be its value.

您还可以将键值对以 JSON 格式发送到 PHP 文件,如下所示:

testscore={'testscore':'tryagain'}; 

如果您有多个值(例如两个)要发送,您可以执行以下操作:

testscore={'testscore':'tryagain','index2':'value2'}

在您的 PHP 代码中,如果在 ajax 中使用 post as type,您可以得到如下结果:

$testscore1=$_POST['testscore']; //It will assign tryagain
$testscore2=$_POST['index2'];    //It will assign value 2

评论

0赞 TryHarder 11/8/2011
感谢您非常详细的回答!这很容易理解。